繁体   English   中英

如何使用委托方法在两个视图控制器之间传递对象?

[英]How to use delegate methods to pass objects between two view controllers?

我正在使用Xcode 4.2的Utility Application项目,然后我为每个视图添加两个文本字段: main viewflipside view 现在我希望将flipside文本字段的值分配给主视图文本字段。

MainViewController.h

      #import "FlipsideViewController.h"

      @interface MainViewController : UIViewController <FlipsideViewControllerDelegate>  {
        UITextField *nameField;
      }
      @property(nonatomic, retain) IBOutlet UITextField *nameField;

      - (IBAction)showInfo:(id)sender;

      @end

FlipsideViewController.h

      @class FlipsideViewController;

      @protocol FlipsideViewControllerDelegate
         - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
      @end

      @interface FlipsideViewController : UIViewController {
          UITextField *changeText;
      }
      @property (nonatomic, retain) IBOutlet UITextField *changeText;
      @property (assign, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;

      - (IBAction)done:(id)sender;

      @end

FlipsideViewController.m

      #import "FlipsideViewController.h"

      @implementation FlipsideViewController

      @synthesize delegate = _delegate;
      @synthesize changeText;

      - (IBAction)done:(id)sender
      { 
        [self.delegate flipsideViewControllerDidFinish:self];
      }

完成操作开始后,我希望将changetext值分配给nameField文本。 我该怎么做呢?

MainViewController.m中 ,将flipSideViewControllerDelegate方法实现为:

 - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
{
self.nameField.text=controller.changeText.text;
}

因此,当调用done:方法时,也会使用flipSideViewController对象作为参数调用此委托方法,通过该changeText可以访问changeText

编辑回答评论中的问题:

在您的协议FlipSideViewControllerDelegate中,添加以下方法:

 - (void)flipsideViewControllerDidSelect:(NSIndexPath*)indexPath

然后它类似于MainViewController.m中的其他委托方法实现,这是协议的真正工作方式。 如果您的MainViewController符合协议,它可以实现该协议的方法。 默认情况下,协议中声明的所有方法都是可选的,但您可以选择指定方法是可选的还是必需的

@optional
//list of methods
@required
//list of methods

请记住,如果您的方法在协议中声明为必需,则符合该协议的任何类都必须实现它。 无论如何,在你的MainViewController.m中

- (void)flipsideViewControllerDidSelect:(NSIndexPath*)indexPath
{
int anInt=indexPath.row;
self.nameField.text=[NSString stringWithFormat:@"%d",anInt];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM