【发布时间】:2012-12-27 21:54:18
【问题描述】:
我对 iOS 编程比较陌生,所以请耐心等待。我正在处理的要求如下:
屏幕 1: 向用户显示加载数据的 UITableView,特别是城市和州。用户点击一个选择并且是 转到屏幕 2。
屏幕 2:向用户显示他们选择进行编辑的项目的“详细”视图。
- 城市字符串 (selectedCity) 放置在文本框中进行编辑
- 在 UITableView 中加载了一个 NSArray 状态。应根据从屏幕 1 传递的字符串 (selectedState) 在加载表中选择所选城市的状态。如果需要,用户可以在此处选择不同的状态。
- 第二个 UITableView 将包含一组与城市相关并从数据库中检索的学校。有一组单独的功能可用于管理此列表。
我在实施屏幕 1 时没有遇到任何问题。以下是我将城市和州值传递到屏幕 2 的方式:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the City
self.checkedCellIndex = indexPath.row;
FSCity *selectedCity = [CityList objectAtIndex:indexPath.row];
NSString *cityName = selectedCity.name;
NSString *stateName = selectedCity.state;
AdminCityView *dvController = [[AdminCityView alloc] initWithNibName:@"AdminCityView" bundle:[NSBundle mainBundle]];
dvController.selectedCity = cityName;
dvController.selectedState = stateName;
[self.navigationController pushViewController:dvController animated:YES];
dvController = nil;
}
然而,为了构建 Screen 2,我必须为每个 UITableView(StateTable 和 SchoolTable)创建 UITableViewController,并将它们加载到主 UIViewController(AdminCityView),如下所示:
- (void)viewDidLoad
{
[super viewDidLoad];
txtCity.text = selectedCity;
if (stateController == nil) {
stateController = [[StateTable alloc] init];
}
if (schoolController == nil) {
schoolController = [[SchoolTable alloc] init];
}
[tblState setDataSource:stateController];
[tblSchool setDataSource:schoolController];
[tblState setDelegate:stateController];
[tblSchool setDelegate:schoolController];
stateController.view = stateController.tableView;
schoolController.view = schoolController.tableView;
}
虽然我可以在 UIViewController 中很好地获取 selectedState 变量,并且我的 State 表在 UIView 中加载也很好,但我被困在如何将 selectedState 变量从我的 UIViewController (AdminCityView) 传递到 UITableViewController (StateTable)这样我就可以使用变量对StateTable执行操作(例如选择与变量匹配的行)。
我一直在 AdminCityView 和 StateTable 上使用 NSLog 进行测试,并且该变量目前肯定只能从 AdminCityView 访问。我不确定是否需要通过 AdminCityView 中的代码传递它,或者我是否应该返回屏幕 1 并在导航到 AdminCityView 之前以某种方式将其传递给 StateTable。
我很高兴发布任何可能有助于获得答案的其他代码。谢谢!
【问题讨论】:
-
为什么要使用两个表视图。我会使用一个带有标题的表格视图和两个部分用于不同的选择。
-
出于用户体验目的。在视图(屏幕)1 上,用户将选择他们想要编辑的城市。屏幕 2 将允许他们编辑该城市的名称、它所属的州,并添加/编辑/查看该城市内的学校列表。应用程序中还有其他几个类似的数据结构,所以一旦我让这个“模型”工作,我想重复它来处理那些其他数据集(再次,为了一致的用户体验)。
-
为什么不能为 selectedState 使用全局字符串变量。然后不需要传递值。您可以直接从 UITableViewController 访问该变量..
标签: objective-c uiviewcontroller nsmutablearray uitableview