如何使用UIStoryboard segues将数据从一个View传递到IOS中的其他视图?

时间:2012-08-03 09:01:21

标签: iphone ios ios5 uistoryboard shake

我正在使用 Xcode 4.3.1 。我使用Storyboard创建了UI,它有许多View Controller。

问题

在我的应用中,我正在使用ShakeGesture。在摇晃我正在做一些操作,它的工作正常。但是,当摇动停止时,我需要将一些值传递给另一个View控制器来显示它。我看到很多帖子说它如何在点击按钮时传递值,但没有人与我的问题相关。

如果你解决我的问题会很棒

我的问题是

如何在摇动停止后将值从一个View传递到另一个View控制器?

我正在寻找任何示例或教程。非常感谢。

上述问题的确切功能

我在第一视图控制器

中有一个按钮

enter image description here

当触发按钮时,它会弹出一些数据的pickerview。当用户选择它时,选择器值将替换按钮值。

enter image description here

然后当它停止时发生抖动我必须将数据传递给其他视图控制器。

代码

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.subtype == UIEventSubtypeMotionShake)
{
        // I need to pass data here. Thats i am confusing

}

}

之前曾问过这个问题,但我无法得到解决方案,这就是为什么我要再问一次。为此道歉。 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

您可以显式传递数据,也可以在与prepareForSegue调用相关的storyboard中传递数据。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"ContactsViewControllerSegue"]){
        ContactsViewController *cvc = (ContactsViewController *)[segue destinationViewController];
        cvc.contacts = self.contacts;
        cvc.delegate = self;
    }
}

有关完整教程,请查看此website

要以编程方式触发segue,您可以查看Apple Docs,但这是他们更改方向的示例。

- (void)orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;
    if (UIDeviceOrientationIsLandscape(deviceOrientation) &&
        !isShowingLandscapeView)
    {
        [self performSegueWithIdentifier:@"DisplayAlternateView" sender:self];
        isShowingLandscapeView = YES;
    }
// remainder of example omitted....
}

所以你会在抖动停止时触发segue,然后在prepareForSegue方法中准备下一个viewController。

答案 1 :(得分:0)

你需要在SecondViewController中创建字符串对象并设置Property(非原子,保留)并合成它,并在推送控制器后添加下面的代码。

SecondViewController *objSecondViewController=[[SecondViewController alloc] 
initWithNibName:@"SecondViewController" bundle:nil];             

objSecondViewController.strtitle=@"Your data";
[self.navigationController pushViewController:objSecondViewController animated:YES];
[objSecondViewController release];