使用具有分段控制的Storyboard Segues

时间:2014-09-10 15:34:54

标签: ios objective-c storyboard segue uisegmentedcontrol

我有一个分段控件,我用它在三个视图控制器之间切换。我的第一个tableview嵌入在导航控制器中,其中分段控件位于导航控制器中。我在故事板中也有两个自定义segue(动画来自左侧和右侧)。在我的“主”控制器类 - 分段控件的中间 - 我使用此代码

- (IBAction)indexChanged:(id)sender {
    if ([sender selectedSegmentIndex] == 0) {
        [self performSegueWithIdentifier:@"leftSegue" sender:self];
    }
    else if ([sender selectedSegmentIndex] == 1){
    }
    else {
        [self performSegueWithIdentifier:@"rightSegue" sender:self];
    }
}

这适用于那两个控制器。当那些视图控制器被放在屏幕上时,我仍然可以在最左边和右边的控制器之间移动,但是在我尝试过的每次尝试之后,返回主控制器都会崩溃。我认为这与我不理解我发送self消息的performSegueWithIdentifier或我传递给self的{​​{1}}有关。

示例:如果在sender:中我创建了一个新的segue,并且具有来自两个新控制器中的任何一个的唯一标识符,则当拼写正确拼写时,应用程序崩溃说“Receiver没有带标识符的segue”。在这个例子中谁是接收者?

编辑:我在这里添加了我当前的故事板图片。前两个是自定义segues,中间两个是模态和推送,特定于需求。

Edit2:使用像else if ([sender selectedSegmentIndex] == 1){}这样的方法找到正确的视图,但它不允许我切换回初始控制器 - 它重绘它失去了导航栏。

3 个答案:

答案 0 :(得分:1)

在Xcode中,在“断点导航器”视图中添加“异常断点”。 启动您的应用,并尝试减少崩溃。 Xcode现在应该在导致崩溃的指令上停止。 所以现在当你停止时,尝试在调试区中键入po self,以获得哪些类是接收器,它可以帮助你理解正在发生的事情...

答案 1 :(得分:1)

在Objective-C中,

self相当于大多数其他语言中的this(java,php等...)。

这意味着当前的课程。

MainViewController如果您这样做:

[self performSegueWithIdentifier:@"leftSegue" sender:self];

相同
[MainViewController performSegueWithIdentifier:@"leftSegue" sender:self];

答案 2 :(得分:0)

您从当前视图控制器到主视图控制器的segue可能未正确标记为“rightSegue”(或其他任何名称)。

在选择故事板segue时,在Xcode的右侧面板上,检查“标识符”字段是否标记正确。