protocol 和 delegate

目標:
延續範例http://luckfox.iteye.com/blog/1826126,加上protocol/delegate示範


[code]
//
// UIStoryboardSubViewController.h
// StoryboardDemo0
//
// Created by Administrator on 13/3/7.
// Copyright (c) 2013年 Administrator. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
//step 1. 告知protocol StoryboardSubDelegate的存在
@protocol StoryboardSubDelegate;

@interface UIStoryboardSubViewController : UIViewController


@property (strong) NSString *dataString;
@property (weak, nonatomic) IBOutlet UITextField *inputField;
//step 2.宣告一個id<StoryboardSubDelegate>的變數delegate,用來存放物件位址(也就是使用此protocol的Object位址),
//相當於callback中的回Call handle.
@property (weak) id<StoryboardSubDelegate> delegate;


- (IBAction)DoDone:(id)sender;
@end
//step 3.表明此delegate繼承自<NSObject>,如果繼承多個則<N1,N2,...>
@protocol StoryboardSubDelegate<NSObject>
//沒有加上@optional表示必須要實作,反之則可有可無
-(void)second:(UIStoryboardSubViewController *)theSecond inputString:(NSString *)inputString;
@end

[/code]

[code]
//
// UIStoryboardSubViewController.m
// StoryboardDemo0
//
// Created by Administrator on 13/3/7.
// Copyright (c) 2013年 Administrator. All rights reserved.
//

#import "UIStoryboardSubViewController.h"

@interface UIStoryboardSubViewController ()

@end

@implementation UIStoryboardSubViewController
@synthesize inputField;
@synthesize delegate;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
inputField.text=self.dataString;
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (IBAction)DoDone:(id)sender
{
//檢查protocol是否有被實作
if([self.delegate respondsToSelector:@selector(second:inputString:)])
{
//呼叫此protocol的實作函數
[self.delegate second:self inputString:inputField.text];
}
//關掉此ViewController
[self dismissViewControllerAnimated:YES completion:
^{
NSLog(@"done");
}];
}
@end
[/code]
[code]
//
// UIStoryboardDemoViewController.m
// StoryboardDemo0
//
// Created by Administrator on 13/3/7.
// Copyright (c) 2013年 Administrator. All rights reserved.
//

#import "UIStoryboardDemoViewController.h"
#import "UIStoryboardSubViewController.h"
//step 1.protocol StoryboardSubDelegate使用
@interface UIStoryboardDemoViewController ()<StoryboardSubDelegate>

@end

@implementation UIStoryboardDemoViewController

- (void)viewDidLoad
{
[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//過場傳送端
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//將資料送到destinationViewController
id secondCon =segue.destinationViewController;
[secondCon setValue:self forKey:@"delegate"];
[secondCon setValue:@"From Hello" forKey:@"dataString"];
}
//step 2.protocol 裡面的method的實作
-(void)second:(UIStoryboardSubViewController *)theSecond inputString:(NSString *)inputString
{
NSLog(@"received %@",inputString);
}
@end
[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值