我正在开发一个类似于 iphone 中的设置应用程序的应用程序。
在我的第一个 VC 中,我在选择第二个 VC 时有 4 行。我的第二个 VC 显示项目列表。用户选择后,所选文本应显示在与所选文本相邻的 firstVC 上。如何在字典对象或其他方式的帮助下实现它。!在此先感谢...
我正在开发一个类似于 iphone 中的设置应用程序的应用程序。
在我的第一个 VC 中,我在选择第二个 VC 时有 4 行。我的第二个 VC 显示项目列表。用户选择后,所选文本应显示在与所选文本相邻的 firstVC 上。如何在字典对象或其他方式的帮助下实现它。!在此先感谢...
几天前我做了一个类似的任务,这就是我如何完成的。请注意,可能有很多替代方法可以实现您想要的。
关键点:UITableView 依赖于它的 DataSource(数组或字典),它的数据在单元格中显示以及每个部分的节数和行数。
现在,最初您的 DataSource 具有显示为默认值的值。点击该行后,初始化 2ndViewController 并将其推送到导航堆栈上。在这个 2ndViewController 中,您必须以某种方式更新 1stViewController 的 DataSource(替换原始值)。
您可以使用协议和委托
创建一个协议如下。
@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 & Protocol 方法
@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];
}
您还可以在 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 方法中重新加载您的表格视图
- (void)ViewWillAppear:(BOOL)animated
{
[self.tableView reloadData];
[super ViewWillAppear:animated];
}
我认为您需要在 viewDidAppear 中调用 [self.tableView reloadData]。如果可能,请在返回时通过此链接重新加载 UITableView?
您在第一个 VC 中使用的数组。将该数组传递给第二个 VC,在 secondVC 类中对其进行更新,并在 firstVC 类的 viewWillAppear 方法中写入此语句“[firstVC.tableView reloadData]”。
当用户在 secondVC 类中选择任何内容时,这将更新您在 secondVC 类中的 firstVC 类数组,而不是当用户重新加载 firstVC 的返回表视图时。以便更新数组反映在表视图中。