jas*_*onm 5 objective-c uitableview ios
首先抱歉,如果格式不正确,第一次这样做.我一直在使用stackoverflow来寻求帮助很长一段时间,它非常有帮助(谢谢大家),但这是我第一次发布自己的问题.这个问题已被多次询问,但是当我调用[myTable reloadTable]时,调用方法numberOfSectionsInTableView和numberOfRowsInSection但不调用cellForRowAtIndexPath.
我在搜索时看到的每个答案都有以下变化:1)tableView为nil 2)numberOfRowsInSection为0 3)tableView的委托/数据源未设置4)在错误的uiTableView上调用reloadTable.
这些都不是我的情况,所以我想知道还有什么可能是错的.
我正在尝试做什么:我有一个自定义的uitableviewcell,上面有一个按钮,当按下按钮时我想改变单元格的属性(例如,我只想说我要将单元格标题更改为"按下按钮").然后我想暂停片刻,然后删除单元格.
不确定这是否重要,但我的tableView在UIViewController中,viewController是委托和dataSource.
我有一个方法(下面),按下按钮时触发,并根据需要更改单元属性,但是当我尝试刷新表以显示更改时它不起作用.第一次调用[remTable reloadData]时,会调用numberofsectionsintableview和numberofrowsinsection,但不会调用cellforrowatindexpath.但是,第二次[remTable reloadData]被调用时,所有三个方法都被调用,一切正常.
doneCell.remName.text=@"BUTTON PRESSED";
[remTable reloadData];
NSLog(@"sleep");
sleep(1);
[remList removeObject:doneReminder];
[remTable reloadData];
Run Code Online (Sandbox Code Playgroud)
为了对此进行测试,我将nslog语句放在numberofsections,numberofrows和cellforrow的开头,输出是方法的名称,后跟数字(对于numberofsections/numberofrows).
输出:
numberofsections 1
numberofrows 3
sleep
numberofsections 1
numberofrows 2
cellforrow
Run Code Online (Sandbox Code Playgroud)
关于为什么第一次没有调用cellforrow的任何想法?在此先感谢,如果我还有其他任何可以澄清的内容,请告诉我.
表视图实际上不会请求其单元格,直到它需要显示它们.当你打电话时reloadData,它会立即请求部门和行的数量,以便它知道它需要多大.在要求显示自身之前,它不会询问细胞本身.在每个运行循环开始时,视图会根据需要自动显示.
在代码返回之前,执行不会返回到运行循环.当你打电话时sleep,你不会执行任何代码,但你也不会返回.这意味着运行循环没有机会显示表,因此它永远不会要求任何单元格.你需要做的是从你的方法返回并要求在1秒内调用另一个方法来删除doneReminder.一种简单的方法是使用该performSelector:withObject:afterDelay:方法.此方法添加一个计时器,该计时器将在给定的延迟后调用您请求的方法,这意味着您可以返回到运行循环并让表格显示.
doneCell.remName.text=@"BUTTON PRESSED";
[remTable reloadData];
[self performSelector:@selector(removeDoneReminder) withObject:nil afterDelay:1.0];
Run Code Online (Sandbox Code Playgroud)
- (void)removeDoneReminder {
[remList removeObject:doneReminder];
[remTable reloadData];
}
Run Code Online (Sandbox Code Playgroud)
如果remlist且remTable不是实例变量,则可以使用该withObject:参数将它们发送到removeDoneReminder方法.
| 归档时间: |
|
| 查看次数: |
4205 次 |
| 最近记录: |