0

我遇到了一个最初为 iPhone 设计的通用应用程序的问题,我在 iPhone 上使用了一个 3rd 方类作为弹出窗口。在 iPad 上,我想使用 Apple 提供的弹出窗口。我的问题是我的代码是这样编写的,以便弹出窗口的视图控制器已经在viewDidLoad包含弹出窗口的类中初始化,并且在 seguing 时 - 分配了该类的新实例。有没有办法通过它bckMusicPlayer已经分配的prepareForSegue

@property (nonatomic,strong) MJDetailViewController *bckMusicPlayer; //在调用 prepareForSegue 时已经初始化。我想继续这个对象。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSLog(@"prepare for segue");
    if ([segue.identifier isEqualToString:@"Show iPad Player"]) {
        if ([segue isKindOfClass:[MJDetailViewController class]]) {

        }

    }
}

编辑:我让它从 bckMusicPlayer 传递了播放器(AVAudioPlayer)对象

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"Show iPad Player"]) {

        NSLog(@"class: %@",[segue class]);
        if ([segue.destinationViewController isKindOfClass:[MJDetailViewController class]]) {
            NSLog(@"prepare for segue");
            MJDetailViewController *destinationVC = segue.destinationViewController;
            destinationVC.player = self.bckMusicPlayer.player;
        }

    }

}

4

2 回答 2

1

不,你不能那样做。Segues(除了展开)总是实例化新的控制器。您要么不需要在 viewDidLoad 中实例化它,要么在代码中移动到新控制器而不是使用 segue。

于 2013-07-31T16:21:33.730 回答
1

你不能反过来吗?为什么你必须创建一个实例MJDetailViewController?让 segue 为您完成,然后在 prepareForSegue 中:您抓取目标控制器并将所需的数据传递给它。不要与框架抗争。

或者,您可以覆盖:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

并防止segue,以防它被定位MJDetailViewController并手动传输到您的控制器并呈现它。

于 2013-07-31T16:21:41.650 回答