1

我在更新UITableView. 我调用reloadData它的方法,但cellForRowAtIndexPath没有被调用。代码:

//.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];
}

我在 xib 中连接了theTableViewwith ,我还设置了它的和to 。UITableViewdelegatedataSourceFile's Owner

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

谢谢你。

任何帮助,将不胜感激

编辑

为此找到了一个“丑陋”的解决方案。而不是打电话

[self.theTableView reloadData];

我打了电话

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

它丑陋且硬编码,如果我添加更多单元格或删除一些单元格,以后可能会导致问题,但它可以工作。

仍在寻找可以使用reloadData方法的解决方案

4

3 回答 3

6

reloadData重新显示可见行(为了提高效率)。您之前设置了表格视图的框架这一事实reloadData让我认为表格视图由于某种原因看不到特定单元格当时可见,因此它不会要求新的单元格(这解释了滚动后的原因向下/向上它会正确刷新)。尝试轮询您的 tableview 以查看在调用reloadData( [theTableView visibleCells];) 之前作为可见单元格报告的内容。我希望这将帮助您跟踪问题。

于 2012-06-19T07:43:37.747 回答
1

仅当您在表中有一些更改时才会重新加载表.....

于 2012-06-19T07:30:55.540 回答
0

检查是否tableView不为零...如果是则分配内存

什么在返回

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

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

两者都返回非零值而不是应该调用

于 2012-06-19T06:51:21.923 回答