2012-06-19 55 views
1

我有一个问题,更新UITableView。我呼吁它的reloadData方法,但cellForRowAtIndexPath不会被调用。代码:的UITableView不重新加载

//.h 
@interface MasterViewController : UIViewController<ELCTextFieldDelegate, UITableViewDelegate, UITableViewDataSource> { 
    //some variables 
} 
@property (nonatomic, retain) IBOutlet UITableView *theTableView; 
//other properties 

//.m 
- (void)viewDidLoad { 
    //some code 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
} 

- (void)keyboardWillHide:(NSNotification *)notification { 
    self.theTableView.frame = CGRectMake(0, 0, 320, 480 - 64); 
    [self.theTableView reloadData]; 
} 

UITableView连接theTableView在厦门国际银行,我还设置它的delegatedataSourceFile's Owner

我使用ELCTextFieldCell,它为我提供了一个UITableViewCellUILabelUITextField。我在单元格中插入了一些值,当键盘隐藏tableView时,它应该重新载入它的数据以在其中一个单元格中显示正确的结果。我做了一些调试和计算的工作,因为它应该,但该单元格不刷新(正如我前面提到的cellForRowAtIndexPath方法没有得到[self.theTableView reloadData]后调用。

谢谢。

任何帮助,将不胜感激

EDIT

找到的,一个 “丑” 的解决方案。而不是调用

[self.theTableView reloadData]; 

我叫

[self.theTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:7 inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; 

这是丑陋和硬编码,这可能导致问题以后,如果我会添加更多的细胞或删除一些,但它的作品。

还在寻找那个会用reloadData方法

+0

可以实现代码如下实例为null。那它不起作用。保持NSLog(@“theTableView%@”,theTableView);并检查。 – Dee

+0

你在哪里分配内存到表格视图? – rishi

+0

@Dee它不是。如果我将它从屏幕上滚动并再次显示,单元格将刷新。调试器在keyboradWillHide的第一行显示如下:'(UITableView *)$ 7 = 0x079f3e00 ; contentOffset:{-0,-0}>'。所以我想这不是代码中的@rishi – Novarg

回答

6

reloadData重新显示只有可见行(效率)。您刚才reloadData之前设置你的tableview的框架,这一事实让我觉得,由于某种原因,tableview中没有看到特定的细胞在当时是可见的,所以它不会对一个新的要求(这解释了为什么后向下滚动/向上刷新正确)。尝试轮询您的tableview看到之前调用reloadData[theTableView visibleCells];)什么报告为可见的细胞。我希望这能帮助你跟踪问题。

+1

谢谢!这正是发生的事情。在键盘仍然可见的情况下,tableView变得越来越大,可以拍摄整个屏幕。因此应该更新的单元格被键盘覆盖。只是将'UIKeyboardWillHideNotification'更改为'UIKeyboardDidHideNotification',现在它就像一个魅力一样。 – Novarg

0

检查tableView不为零的解决方案......如果是这样分配的内存

什么是在

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

返回
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

比都返回非零值它应该被称为只有当u有在表中的一些变化

+0

他们分别返回1和8,因为它应该是 – Novarg

+0

上面的方法被调用?然后检查你是否有连接数据源和委托出口连接到类和你的类声明

+0

也检查上述两种方法不会错误地互换...只是猜测... –

1

表被重新加载.....

+0

正在修改用作数据源的字典 – Novarg

+0

当您运行第一次您的项目时,您是否正在获取数据表 – Rajneesh071

+0

nope,当我启动应用程序时tableView为空 – Novarg