gpt4 book ai didi

iphone - 使用 Storyboard设置导航 Controller 时出现问题

转载 作者:行者123 更新时间:2023-12-03 18:52:44 25 4
gpt4 key购买 nike

我之前已经在以前版本的 XCode 中设置了导航 Controller ,但我正在使用最新版本并尝试使用 Storyboard进行设置。我有选项卡栏 Controller ,它提供两种形式。第二个表单有一个 UITableview,当用户使用导航 Controller 进行选择时,我想将其移动到另一个表单。我在下面列出了我的关系。

enter image description here

问题似乎出在我建立的关系上。我已经从第二个表单单击了导航 Controller ,弹出窗口为我提供了“推送、模态或自定义”的选择。我选择了“推送”,但是当我尝试运行下面的代码时,ir 不起作用。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
NSString *tSel = [listContents objectAtIndex:row];

ConstantRateController *detailController = [[ConstantRateController alloc] initWithNibName:@"ConstantRateController_iPhone" bundle:nil];
[self.navigationController pushViewController:detailController animated:YES]
}

我已通过调试器运行代码,它运行时没有错误,但下一个表单不显示。

最佳答案

从您的描述来看,似乎存在三个问题:

  1. 推送segues 要求源 View Controller 嵌入导航 Controller 中——相反,您让源 View Controller 尝试segue导航 Controller 。

  2. 目标 View Controller 也需要位于 Storyboard中。

  3. 一旦使用 Storyboard,您通常不想遵循从 Storyboard前世界推送新 View Controller 的模式(即创建 View Controller 并将其推送到 tableView:didSelectRowAtIndexPath: ) ...这样做会重复 Storyboard为您所做的大量工作。

相反:

  1. 将 TableView Controller 放入导航 Controller 中,并将导航 Controller 放入选项卡 View Controller 中。 (您可以使用“编辑器”>“嵌入”菜单来执行此操作,或者将它们拖出库并拖动它们之间的“关系”连接。)

  2. 通过从库中拖出 View Controller 并将其类设置为 View Controller 类 ( ConstantRateController ),将目标 View Controller 放入 Storyboard 中(如果尚不存在)。

  3. 将推送序列从 TableView 单元格拖到目标 View Controller :

drag to create segue

完成所有三个步骤后,您的 Storyboard应如下所示:

enter image description here

最后,在 TableView Controller 中,实现以下内容:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// test segue.identifier if needed
MyViewController *viewController = segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// set properties of viewController based on selection indexPath
}

segue 创建并推送 View Controller ;您需要做的就是配置它,使其内容反射(reflect)导致转场的表选择。 (请注意,如果您有来自 TableView Controller 的多个 Segue,则应在 IB 中为每个 Segue 提供唯一标识符,并在 prepareForSegue:sender: 中对其进行测试以配置适当的目标 View Controller 。)

<小时/>

如果您需要根据所选单元格在 TableView 之外支持多个 Segue,则情况会有所不同。显然, Storyboard无法了解由您的委托(delegate)/数据源填充的单元格,因此您无法从单元格设置转场...至少,不能在动态表中。

听起来您可能类似于“设置” View ,其中有一组静态单元格,其中每个单元格都应连接到另一个 View (例如某些设置页面)。在这种情况下,您可能需要查看从 Storyboard获得的另一个功能:静态表。如果您在 IB 中选择 TableView (不是 TableView Controller ),属性检查器的顶部可以让您在动态原型(prototype)和静态单元之间切换——前者是我上面描述的,后者可以让您创建单元和部分并完全在 IB 中编辑其内容。使用静态单元格,您可以为每个单元格创建不同的segue...这样您就可以完全在IB中创建一个多页的类似设置的UI(当然,当切换开关时,您仍然需要代码来执行某些操作等等) )。

如果您需要支持动态表中的多个segues,则需要两件事:

  1. segues 的不同来源 - 一个单元格中不能有多个 segues,但(表) View Controller 本身可以有多个 segues。

  2. 根据用户操作选择 Segue 的逻辑。我们回到tableView:didSelectRowAtIndexPath: ,但您只需调用 performSegueWithIdentifier: ,而不是创建新的 View Controller 并将其推送到导航 Controller 上或以模态方式呈现它。上self

this answer中有更多关于此类的细节。 ,以及关于一般 Storyboard编程实践的更多信息,请参见 Apple's view controllers guide :

关于iphone - 使用 Storyboard设置导航 Controller 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9979686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com