我一直遇到这个问题,表视图第一次不加载单元格或显示临时标签。在这两种情况下,当第二次加载表时(通过另一个按钮,我强制它重新加载或通过转到应用程序中的上一个视图并返回到表),所有内容都按预期显示。
我正在使用[table reloadData]
重新加载viewDidAppear:
方法中的表,因为它在viewDidAppear:
方法中不起作用,而在另一种情况下我将其置于按钮操作中。
我也在使用这种方法来设置我在故事板中放置的单元格的标签:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [contactsTableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
UILabel *label = (UILabel *)[cell viewWithTag:1001];
label.text = [Array3 objectAtIndex:indexPath.row];
return cell;
}
修改
我在实现下面声明了数组: NSMutableArray * Array3; 之后在ViewDidLoad方法中我声明了数组的其余部分: Array3 = [NSMutableArray arrayWithObjects:nil]; 然后我通过调用ViewDidLoad方法中的函数来加载数组中的元素,以使用元素填充数组。
编辑2 显示更多我如何填充数组 - (void)viewDidLoad {
[super viewDidLoad];
Array3 = [NSMutableArray arrayWithObjects: nil];
[self loadArray];
}
- (void) loadArray
//populate array in here.
// I use the add object method
// [Array3 addobject:object];
{
答案 0 :(得分:1)
首先是好消息:您的方法cellForRowAtIndexPath
是正确的。
无需在reloadData
和-viewDidAppear:
中调用-viewWillAppear
。如果您在视图被覆盖时修改 Array3 的内容,则此注释可能不适用,这是一种特殊情况。
这不是您定义方法的位置,而是您调用它的位置。填充 Array3 内容的合理位置在
中required init(coder aDecoder: NSCoder!)
或
override func viewDidLoad()
<强>陷阱强>
此外,您需要根据数组返回一致的所有委托方法(numberOfSectionsInTableView
,numberOfRowsInSection
,cellForRowAtIndexPath
)。一种简单的技术是使用数组中的条目数来驱动numberOfRowsInSection
。
何时使用reloadData?
reloadData
的典型用法如下所示:
- (void)loadArray {
//populate array in here.
...
[self.tableview reloadData]; // Possibly postpone to main thread
}
答案 1 :(得分:0)
我认为Array3
在第一次加载时为零。
答案 2 :(得分:0)
单元格标识符是唯一的,例如
NSString *cellIdentifier =[NSString stringWithFormate:@"%d",indexPath.row];
也许这会对你有帮助......
答案 3 :(得分:0)
我相信在Array3
的初始设置中,您必须将此变量分配给内存,然后在不同的函数中使用,例如tableView:cellForIndexPath:
因此,您可以使用Array3 = [NSMutableArray arrayWithObjects: nil];
Array3 = [[NSMutableArray alloc] init];
由于您在此代码行中将其作为空数组保留,因此您不会使用[[NSMutableArray alloc] initWithObjects: nil];
,因为它实际上是相同的交易