如何将参数从一个ViewController传递到另一个?

时间:2012-08-18 23:42:05

标签: iphone objective-c ios ios5

如何将参数从一个ViewController传递到另一个(我在故事板中定义了ViewControllers)? Android中是否有类似的putExtra或任何Bundle来放置值?我需要从第一个ViewController读取一些值并传递给另一个要发出POST请求的值。

3 个答案:

答案 0 :(得分:5)

prepareForSegue:sender:是使用故事板时将数据从一个视图控制器传递到另一个视图控制器的首选方法。检查标识符以确保它是您感兴趣的segue,获取指向目标视图控制器的指针,并设置您想要的任何属性。它可能看起来像这样:

- (void) prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
    if( [[segue identifier] isEqualToString:@"foo"] ) {
        FooViewController* fooView = segue.destinationViewController;
        fooView.someProperty = self.someProperty;
    }
}

Storyboard session from last year's WWDC很好看,如果你还没有看到它。

答案 1 :(得分:4)

这很简单。您需要在第二个viewcontroller中创建一个属性,&将值传递给1 viewcontroller

中的这些属性

答案 2 :(得分:0)

除了其他方式之外,您可以使用Protocol和delegate将对象从一个控制器传递到另一个控制器。 让我们说你需要从控制器(类)A到B传递对象resposeData,下面是你可以做的步骤:

  1. Decalare a Protocol 例如

    @protocol NetworkOperationDelegate

    @Required

    - (void)operationCompleted:(id)responseData tag:(id)tag;

    - (void)operationFailed:(id)responseData tag:(id)tag;

    @end

  2. 在A类中声明Id类型的属性,该属性指向ur delegate class

    @property (nonatomic, retain) id < NetworkOperationDelegate > operationDelegate;

  3. 假设您在自定义初始化器中初始化self.delegate:

    - (id)initWithRequest:(NSURLRequest *)请求operationDelegate:(id)delegate tag:(id)tag

     {
    
     self = [super init];
      if (self) {
       self.request = request;
       self.tag = tag;
       self.operationDelegate = delegate;
     }
     return self;
    

    }

  4. 然后,只要你想在A类中定义,就调用ur delegate上的方法:让我们说A类接收数据时,你想要B类处理收到的数据

  5. 确保在B类中实现协议方法     @interface B:NSObject     @end

    @implementation B
    
    -(void) operationCompleted:(id) responseData tag:(id) tag
    {
    
    // imlement code
    

    }

    - (void)operationFailed:(id)responseData标签:(id)标签    {

     // imlement code
    

    }

    @end
    
  6. 希望这有帮助!!!