我的iOS应用程序中有一个UIViewController
,显示一个派生自NSMutableArray
的表。此表中的单元格均指向用户进行选择时调用的唯一UIViewController
。我在“didSelectRowAtIndexPath:”方法中尝试做的是通过UIViewController
动态创建NSMutableDictionary
,其中包含与表格所在的NSMutableArray
中的值匹配的键,以及包含需要调用的相应UIViewController
的相应类名的值。因为列表很长,我想我需要使用for循环来做这个,但是我对如何做这个有点困惑。我的NSMutableDictionary
看起来像这样:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"aViewController" forKey:@"SelectionA"];
[dict setObject:@"bViewController" forKey:@"SelectionB"];
[dict setObject:@"cViewController" forKey:@"SelectionC"];
我的NSMutableArray是我的TableView的基础,如下所示:
NSMutableArray *myArray = [[NSMutableArray alloc] initWithObjects:@"SelectionA", @"SelectionB", @"SelectionC",...,nil];
如何获取对单元格内部值的引用,然后构造一个for循环,该循环将动态创建与tableView中用户所做的选择相对应的正确viewController,然后将用户带到该viewController通过navigationController?
感谢所有回复的人。
答案 0 :(得分:2)
创建许多ViewControllers不是一个好主意,你应该创建一个ViewController, 并将tableCell的值传递给它。换句话说,通过选择单元格来更改ViewController的数据模式。但是你将呈现相同的ViewController。
只有当你的单元格被核心化为不同类型(例如一个单元格为道路毛,另一个单元格为文本值)时,你必须调用不同的ViewControllers。
如果您真的需要不同的视图控制器,那么从单元格数据中获取您想要显示的类型
didSelectCellRowAtIndexPath
中的
myAppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];
UIViewController *viewControllerToDisplay;
switch (selection.type) {
case MapType:
viewControllerToDisplay = appDelegate.mapViewController;
case Picture:
viewControllerToDisplay = appDelegate.pictureViewController;
}
现在将viewControllerToDisplay推送到navigaton Controller。
答案 1 :(得分:0)
如果确实需要每个单元格的视图控制器,则无需使用字典查找它们。由于选择将通过索引路径进行,因此数组是更好的选择。
创建一个具有两个属性的自定义对象:要在单元格中显示的名称,以及指向要在其选中时推送的视图控制器的指针。使用这些对象而不是字符串加载myArray
。填充单元格时,选择与该行匹配的对象并使用其名称。轻触单元格时,选择与该行匹配的对象并按下其控制器。
(但是,正如其他人所说,如果你可以使用相同的控制器而只改变数据,那就是要走的路!)
答案 2 :(得分:0)
这是解决方案, 如果您知道类的名称,则将所有类名存储在数组中,其中包含具有键ClassName和Xib的字典。我更喜欢plist来存储名字,但你也可以使用其他方式。
在选择的表格或选择器中放置代码,
Class classobject = NSClassFromString([[ClassArray objectAtIndex:row]valueForKey:@"ClassName"]);
id object = [[classobject alloc] initWithNibName:[[ClassArray objectAtIndex:row]valueForKey:@"Xib"] bundle:nil];
[self.navigationController pushViewController:object animated:YES];
第一行会将您的字符串转换为类。 现在我们有一个好处,即id可以保存任何对象,因此使用id创建对象。最后你有一个自定义类对象,你可以做任何你想做的事情,这里只是我做导航的演示。