方法一中,“页面2的sender方法不执行”是什么意思?页面2的哪个方法没有执行?

解决方案 »

  1.   


    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    这个方法不执行。如果在Storyboard中使用model类型的segue连线是可以执行的,但是那样的话第三个页面就变成一片黑。现在使用的root view controller。
      

  2.   

    控制器之间的传值不是那么复杂。一般情况下的传值有两种情况,如有A,B 两个控制器。一种情况是,A向B传值,还一种情况是 B回传值给A。下面简单说一下这两种方式的实现
    第一种情况比较简单,用的也比较多。A控制器向B控制器跳转时,同时向B传值。我们常用的解决办法是在B控制器中公开一个可被外部访问的属性,在A向B跳转时设置这个属性。B控制器在viewDidLoad中可接收到这个属性,并做处理。
    第二种情况在实际开发过程中也能经常碰到。如下场景:由于ios没有默认的下拉列表控件dropdownlist ,我们在处理这种选择时,会另寻它法,通常会用一个弹出窗口或另开一个页面的方式显示加载全部的可选项,在选择结束后,我们希望选择的值能回传给它的调用者,以实现选择。处理这种回传值的情况在ios中我们可以通过“代理”,block, 或通知来实现(通常是前两种)
    在你的方法2中,你就使用了代理的方式来实现传值。但你在使用的过程中有问题。
    如果一个控制器(B)要把值回传给另外一个控制器(A),那么我们称B为发送者,A为接收者。 在B中定义协议方法,在A中实现B的协议方法,如我描述的场景,选择列表的控制器(B)在选择完成后回传值给(A)@protocol BDelegate:<NSObject>
    -(void)b:(B *)b didSelectedValue:(NSString *)str;
    @end
    @interface B: UIViewController 
    @property(assign) id<BDelegate> delegate;
    @end@implementation B
     //////选择动作
    -(IBAction)chooseItem:(id)sender {     NSString *value = XXXx;//......得到选择的值
         
         //////判断代理是否有订阅者
        if ([self.delegate respondToSelector:@selector(b:didSelectedValue:)]) {
                [self.delegate b:self didSelectedValue:value]; ////////将value值回传
        }
    }
    @end@interface A: UIViewController <BDelegate>    ////////指明A需要实现B的协议
    @end
    @implementation A#pragram  B Delegate
    -(void)b:(B *)b didSelectedValue:(NSString *)str {
           //////////str 即为从B回传过来的值,在A中根据这个值做处理。
    }
    @end
      

  3.   


    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    这个方法不执行。如果在Storyboard中使用model类型的segue连线是可以执行的,但是那样的话第三个页面就变成一片黑。现在使用的root view controller。
    你的页面2有没有触发事件跳转到页面3?