iOS 頁面?zhèn)髦捣绞?單例,block,代理協(xié)議方法,通知中心

實(shí)現(xiàn)了以下iOS頁面間傳值:1.委托delegate方式;2.通知notification方式;3.block方式;4.UserDefault或者文件方式;5.單例模式方式;6.通過設(shè)置屬性,實(shí)現(xiàn)頁面間傳值

情況一 屬性傳值

屬性傳值用于正向傳值,比如從a界面跳轉(zhuǎn)到b頁面。在a界面導(dǎo)入b頁面的頭文件,給創(chuàng)建的b類的b對(duì)象的屬性賦值,代碼如下

在要跳轉(zhuǎn)的b界面,添加個(gè)屬性

    @interface ShuxingViewController : UIViewController
    //@property (weak, nonatomic) IBOutlet UILabel *Shuxinglabel;
    @property (weak, nonatomic) IBOutlet UILabel *Slabel;
    @property(strong,nonatomic)NSString *String;

在a界面

   ShuxingViewController *Shuxing=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"ShuxingViewController"];
Shuxing.String=self.ShuxingTextField.text;
[self.navigationController pushViewController:Shuxing animated:YES];

情況二 delegate協(xié)議方法

這個(gè)可以應(yīng)用于反向傳值,就是a頁面,跳轉(zhuǎn)到b頁面,b在有值要傳回a頁面。

首先在b界面要聲明一個(gè)帶參數(shù)的協(xié)議方法-(void)show:(NSString *)strig;

 #import <UIKit/UIKit.h>
@protocol DelegateViewControllerDelegate 
@optional
-(void)show:(NSString *)strig;
@end
@interface DelegateViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *DelegateTextfield;
@property (nonatomic, weak) id <DelegateViewControllerDelegate> delegate;
- (IBAction)DeBack:(id)sender;
@end

在b的.m文件里,當(dāng)點(diǎn)擊返回按鈕以后,要調(diào)用這個(gè)協(xié)議方法,并傳入這個(gè)要傳的參數(shù) self.DelegateTextfield.tex

- (IBAction)DeBack:(id)sender {
[self.delegate show:self.DelegateTextfield.text];
 }

在b里面聲明了這個(gè)方法-(void)show:(NSString *)strig; 然后并且調(diào)用了,那在哪里實(shí)現(xiàn)這個(gè)方法呢?對(duì)了,在a界面實(shí)現(xiàn)它

在a界面,導(dǎo)入這個(gè)b界面的頭文件,

#import "DelegateViewController.h"
#import "ViewController.h"
#import "ShuxingViewController.h"
@interface ViewController ()<DelegateViewControllerDelegate>

@end

注意,這一定要寫的

@interface ViewControlle()<DelegateViewControllerDelegate>

然后在a的.m文件里面實(shí)現(xiàn)-(void)show:(NSString *)strig 這個(gè)方法

   -(void)show:(NSString *)strig{
    NSLog(@"%@",strig);
    self.ViewDeLabel.text=strig;
    }

如果只完成了上面的步奏,還是不能傳值的。還要在a的.m文件里點(diǎn)擊進(jìn)入b頁面的方法里,讓創(chuàng)建的b對(duì)象,遵守delegate

 - (IBAction)DelegatecLick:(id)sender {
DelegateViewController *ssssss=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"DelegateViewController"];
ssssss.delegate=self;
[self.navigationController pushViewController:ssssss animated:YES];
}

情況三 block 傳值

關(guān)于block 有兩篇介紹 block介紹:http://blog.csdn.net/totogo2010/article/details/7839061 一篇描述block回調(diào)挺有意思的文章: http://blog.csdn.net/mobanchengshuang/article/details/11751671

下面說下怎么用block傳值

首先在b頁面的.h中 定義一個(gè)block,傳一個(gè)NSString的參數(shù)

 typedef void (^ablock)(NSString
                   *str);

并且聲明一個(gè)ablock的屬性

     @property (nonatomic,copy) ablock block;

在b的.m 當(dāng)點(diǎn)擊把參數(shù)傳給上個(gè)頁面的方法里,實(shí)現(xiàn)這個(gè)block

 - (IBAction)BlockBack:(id)sender {
self.block(self.BlcokTextfield.text);
 }

在b的控制器里面實(shí)現(xiàn)了這個(gè)block以后,要回到a的.m里面去回調(diào)這個(gè)block

 - (IBAction)BlcokcLick:(id)sender {
BlockViewController *ssssss=[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"BlockViewController"];

ssssss.block=^(NSString *str){
    //當(dāng)這個(gè)block 在b頁面里面實(shí)現(xiàn)了以后,這個(gè)代碼塊里面的內(nèi)容就會(huì)被執(zhí)行
    self.BlcokLabel.text=str;
};
[self.navigationController pushViewController:ssssss animated:YES];
}

單例模式

首先要先創(chuàng)建一個(gè)單例的類

.h

   #import <Foundation/Foundation.h>

    @interface LittleSinge : NSObject
    @property(nonatomic,strong)NSString *kk;
    +(LittleSinge
      *)sharedLittleSinge;
    @end 

.m

#import "LittleSinge.h"

@implementation LittleSinge
//下面這樣寫 是保證SingleCommone 這個(gè)類只會(huì)被創(chuàng)建一次
+(LittleSinge
  *)sharedLittleSinge{
    static LittleSinge *singleCommone = nil;
    static dispatch_once_t once;
    dispatch_once(&once,
                  ^{  singleCommone
                      = [LittleSinge new];
                  });
    return singleCommone;
    }
@end

創(chuàng)建好單例文件以后呢,在要傳值的頁面,導(dǎo)入單例的頭文件 對(duì),就像這樣

  #import "LittleSinge.h"
  #import "SingeleViewController.h"

在b的.m傳值返回上個(gè)頁面的方法里,給

 - (IBAction)SingleBack:(id)sender {
[LittleSinge sharedLittleSinge].kk=self.SingleText.text;
}

在a的.m的viewWillAppear方法里

-(void)viewWillAppear:(BOOL)animated{
self.SingleLabel.text=[LittleSinge sharedLittleSinge].kk;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容