无法从自定义单元格重新加载Tableview

时间:2013-06-27 05:47:12

标签: iphone ios objective-c ipad uitableview

我有UITableView个自定义tableview个单元格。我的Cell之一有一个UITextField,我正在处理自定义textfield类中的tableviewCell委托方法。我需要在用户输入文本后重新加载tableview,我已完成以下操作但没有工作,任何想法请帮助我。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    UITableView *parentTable = (UITableView *)self.superview;
    [parentTable reloadData];
}

10 个答案:

答案 0 :(得分:3)

注册视图控制器以接收数据已更改的通知,并在收到数据时刷新表。然后让解析器将其发送出去。

注册很容易:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(reloadTableView:)
                                             name:@"reloadTableView"
                                           object:nil];

您的刷新方法需要设置为接收这些通知,具体如下:

- (void)reloadTableView:(NSNotification *)notif {
    [self.yourTableName reloadData];
}

在ViewDidUnload中停止观察非常重要:

[[NSNotificationCenter defaultCenter] removeObserver:self];

然后在解析器中,您只需在完成后添加它:

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadTableView" 
                                                    object:nil];

视图控制器(以及使用该名称观察通知的其他任何人)将获取消息并执行其任务。

谢谢..

答案 1 :(得分:1)

CustomCell.h

@property (nonatomic, copy) void(^tapHandler)(NSUInteger tag);

CustomCell.m

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    NSUInteger tag = 10; //Need to change the tag
    self.tapHandler(10);
}

Controller.m或者

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
 {
    // Whatever content was previously there. Add the below line in addition

     cell.tapHandler = ^(NSUInteger tag){
        [tableView reloadData];
    };

    return cell
 }

希望它有所帮助!

答案 2 :(得分:0)

首先,textfiled的superview不是UITableview,它是tableviewcell或tableviewcell.contentview(取决于你的代码)

然后,您只需将tableview设置为视图控制器的成员或属性

然后

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [self.tableview reloadData];
}

答案 3 :(得分:0)

试试这个,

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [self.parentTable reloadData];
}

答案 4 :(得分:0)

最好在CustomCell

中保留对表格视图的引用
 // interface
 UITableView *tableView;

 // propery 
 @property (nonatomic)UITableView * tableView;

然后

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  //your stuff
  cell.tableView= tableView;
}

答案 5 :(得分:0)

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
UITableView *parentTable = (UITableView *)textField.superview.superview;
[parentTable reloadData];
}

答案 6 :(得分:0)

(UITableView *)self.superview;,您将无法获得表格视图。请尝试以下代码:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
      YourCell *cell = (YourCell *)[[textField superview] superview]; // you will get cell
      UITableView *table = cell.superview; // you will get table view
      [table reloadData];
}

答案 7 :(得分:0)

不要为该小操作重新加载整个表视图。只需重新加载文本字段所在的单元格即可。还没有忘记更新您的数据源,因为表格视图单元格在加载单元格时从数据源获取数据。

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
     [tableViewDataSource addObject:textField.text];//this will fill the data source with data of textfield
    CustomCell *cell = (CustomCell *)textField.superview.superview;
    NSIndexPath *indexPath = [parentTable indexPathForCell:cell];
    [parentTable reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

答案 8 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableReload++;
    NSString *CellIdentifier = [NSString stringWithFormat:@"cell %d%d",indexPath.row,tableReload];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

        cell.textLabel.text = @"Hello";


    }
    // Configure the cell.
    return cell;
}

答案 9 :(得分:0)

试试这个,

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
   [self.yourTableName reloadData];
   [self.yourTableName reloadInputViews];
}