在.h文件中:
@property (weak, nonatomic) IBOutlet UITableView *tableView;
在.m文件中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"RememberedTableListCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text = [[listItems objectAtIndex:indexPath.row] objectForKey:@"word"];
return cell;
}
- (IBAction)resetList:(UIBarButtonItem *)sender {
UIAlertView *resetAlert = [[UIAlertView alloc] initWithTitle:@"Reset" message:@"Are you sure to reset the list?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil];
[resetAlert show];
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// the user clicked Yes
if (buttonIndex == 1) {
// reset the list
//reload table data
NSLog(@"button yes is clicked");
for (NSMutableDictionary*l in listAll) {
[l setValue:@"0" forKey:@"remembered"];
}
[self.tableView reloadData];
//[[NSOperationQueue mainQueue]addOperationWithBlock:^{[self.tvRemembered reloadData];}];
//[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForSelectedRows] withRowAnimation:UITableViewRowAnimationNone];
NSLog(@"refreshing...");
}
}
如何使用 UIAlertView代表刷新 UITableView ?我已按上述方式尝试reloadData:
和reloadRowsAtIndexPaths:
。但他们没有帮助。任何帮助将不胜感激。
答案 0 :(得分:2)
有些时候reloadData
无法正常工作,因此您需要reloadData
延迟时间,例如,
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// the user clicked Yes
if (buttonIndex == 1) {
[self performSelector:@selector(reloadTableData) withObject:self afterDelay:0.20]; // set afterDelay as per your requirement.
}
}
方法
-(void)reloadTableData
{
[self.tableView reloadData];
}
了解更多信息
答案 1 :(得分:2)
您应该只更新数据源并调用reloadData
。
(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// the user clicked Yes
if (buttonIndex == 1)
{
// TODO : Update your data source (most likely array) here.
NSLog(@"refreshing...");
[self.tableView reloadData];
}
}
希望它有所帮助!
修改强>
我对您的更新有两条评论:
您正在使用listItems
填充cell.textLabel.text
并使用了objectForKey word
。尝试更新word
集合中密钥listItems
的值。因此,您的单元格事件将使用新值。
避免为UITableView使用相同的名称tableView
,因为其名称由其事件使用。我个人要么注意使用self
方法,要么使用不同的名称来避免警告类似的实例名称。
答案 2 :(得分:1)
来自Apple Docs,不应在插入或删除行的方法中调用它,尤其是在通过调用beginUpdates和endUpdates实现的动画块中
您必须仅使用reloaddata
,而不是beginUpdates
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
// the user clicked Yes
if (buttonIndex == 1) {
[self.tableView reloadData];
}
}
答案 3 :(得分:0)
一次尝试这么多东西不起作用。
如果您有适当的代表和& tableview的数据源不仅仅是:[self.tableView reloadData];
会奏效。