根据 tableview 选择加载特定的 NIB

Posted

技术标签:

【中文标题】根据 tableview 选择加载特定的 NIB【英文标题】:Load a particular NIB based on tableview selection 【发布时间】:2010-07-23 12:41:59 【问题描述】:

我创建了一个初始表格视图,作为我的应用程序中的初始菜单。显然,每个选项都会访问不同的东西,包括 NIB。菜单选项的部分常量是 NIB。当从 PLIST 中提取每个选项时,我还包括我希望调用的 NIB。

我是错过了什么,还是我完全走错了路?

现在选择什么都不做。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

NSMutableString *targetnib = [[self.menuoptions objectAtIndex:indexPath.row] objectForKey:NIB_KEY];
if (targetnib == @"HospitalDirectoryViewController") 
    HospitalDirectoryViewController *hospitalDirectoryViewController = [[HospitalDirectoryViewController alloc] initWithNibName:@"HospitalDirectoryViewController" bundle:nil];
    // ...
    // Pass the selected object to the new view controller.
    [self.navigationController pushViewController:hospitalDirectoryViewController animated:YES];
    [hospitalDirectoryViewController release];

if (targetnib == @"PhysicianDirectoryViewController") 
PhysicianDirectoryViewController *physicianDirectoryViewController = [[PhysicianDirectoryViewController alloc] initWithNibName:@"PhysicianDirectoryViewController" bundle:nil];
 // ...
 // Pass the selected object to the new view controller.
 [self.navigationController pushViewController:physicianDirectoryViewController animated:YES];
 [physicianDirectoryViewController release];

【问题讨论】:

【参考方案1】:

尝试使用 [targetnib isEqualToString: @"TheNibName"]。在您发布的代码中,您是在比较指针,而不是文本。

【讨论】:

这是有道理的。但是,由于它期望 ( and ) 我尝试了 if ([targetnib isEqualtoString:@"DirectoryViewController"]) 我收到了可能没有响应的警告,并且它在运行时崩溃了。所以这似乎是正确的方法,我仍然在某个地方弄乱了语法。 也许您只是在评论中输入了错误,但请确保选择器是 isEqualToString: 而不是 isEqualtoString:,就像您输入的那样。 另外...您将其键入为 NSMutableString 而不是 NSString 是否有特定原因? NSMutableString 将安全地转换为 NSString,但反之亦然(如果您真的希望字符串可变,则需要制作 mutableCopy)。 我把它改回了 NSString。不知道为什么我做了可变的。大小写的变化 isEqualtoString ---> isEqualToString 修复了它。小小的疏忽让我着迷。

以上是关于根据 tableview 选择加载特定的 NIB的主要内容,如果未能解决你的问题,请参考以下文章

从列表中选择并重新加载 Tableview Swift

如果用户允许或拒绝获取当前位置,则重新加载 TableView 数据

从 AppDelegate Swift 4 更新 tableView 行

根据单元格选择,使用 NSArray 中的选择对象重新加载 UITableView

快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview

选择行后Tableview不会重新加载数据