tableView没有在iphone中更新

时间:2012-06-20 05:54:59

标签: iphone uitableview ios5

我正在开发一款与iphone中的设置应用类似的应用。

在我的第一个VC中,我选择了4行,它需要第二个VC。我的第二个VC显示项目列表。一旦用户选择,所选文本应显示在与所选文本相邻的第一个VC上。 如何在字典对象的帮助下或以其他方式实现它。!提前感谢...

3 个答案:

答案 0 :(得分:2)

几天前我做了类似的任务,这就是我如何完成的。请注意,可能有很多替代方法可以实现您的目标。

KeyPoint:UITableView依赖于其DataSource(数组或字典),以便在单元格中显示数据以及每个部分的部分和行数。

现在,您的DataSource最初具有默认显示的值。点击该行后,初始化并将2ndViewController推送到导航堆栈。在这个2ndViewController中,你必须以某种方式更新1stViewController的DataSource(替换原始值)。

方法1

你可以使用Protocols&代表

创建如下协议。

@protocol MyTableDelegate 
- (void) dismissWithData:(NSString*)data;

在2ndViewController中创建委托引用,调用该委托方法并传递所选数据

@interface 2ndViewController : UIViewController
@property (assign) id<MyTableDelegate> delegate;
@property (assign) NSIndexPath *ip;
// Also synthesize it

@implementation 2ndViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self.delegate dismissWithData:@"Second Table Selection"];
    [self.navigationController popViewControllerAnimated:YES];
}

现在在1stViewController中,实现TableView&amp;协议方法

@interface 1stViewController : UIViewController <MyTableDelegate>

@implementation 1stViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    2ndViewController *controller = [[2ndViewController alloc] initWithNib....];
    // Set the Delegate to Self
    controller.delegate = self;
    self.ip = indexPath;
    // Push Controller on to Navigation Stack
}

- (void) dismissWithData: (NSString*) data
{
     // We Will Store NSIndexPath ip in didSelectRowAtIndex method
     // Use the ip to get the Appropriate index of DataSource Array
     // And replace it with incoming data         // Reload TableView
     [self.dataSource replaceObjectAtIndex:[ip row] withObject:data];
     [self.tableView reloadData];
}

方法2

你也可以在didSelectRowAtIndexPath方法中将数据源传递给2ndViewController。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    2ndViewController *controller = [[2ndViewController alloc] initWithNib....];
    controller.dataArray = self.dataSource;
    // Push Controller on to Stack
}

然后在2ndViewController的相同didSelectRowAtIndexPath方法中,更新数据源,然后调用

[self.navigationController popViewControllerAnimated:YES];

另外,你需要在1stController的ViewWillAppear方法中重新加载你的tableview

- (void)ViewWillAppear:(BOOL)animated
{
     [self.tableView reloadData];
     [super ViewWillAppear:animated];
}

答案 1 :(得分:1)

我认为你需要在viewDidAppear中调用[self.tableView reloadData]。如果可能,请浏览此链接Reload UITableView when navigating back?

答案 2 :(得分:1)

您在第一个VC中使用的阵列。将该数组传递给第二个VC,在第二个VC类中更新它,并在firstVC类的viewWillAppear方法中写下此语句“[firstVC.tableView reloadData]”。

当用户选择secondVC类中的任何内容时,这将更新secondVC类中的firstVC类数组,并且当用户naivgates返回firstVC的表视图时,将重新加载。这样更新数组就会反映在表视图中。