標籤:

iOS 頁面之間的傳值總結

iOS 頁面之間的傳值總結

1、屬性傳值

(1):屬性傳值第一步需要用到什麼類型就定義什麼樣的屬性

(2):從上一個頁面到一個頁面的選中方法裡面將要傳的值傳到來(上一個頁面)備註:這種方法只適用於上一個頁面推到下一個頁面。

如:MainViewController與SecondViewController兩個視圖控制器,點擊MainViewController中的按鈕將跳轉到SecondViewController視圖,同時想要傳遞一個值過去。這時可以利用屬性傳值。

首先SecondViewController視圖中需要有一個屬性用來 存儲傳遞過來的值:

@property(nonatomic,retain) NSString *firstValue;//屬性傳值

然後MainViewController視圖需要引用SecondViewController視圖的頭文件,在視圖中的按鈕點擊事件中,通過SecondViewController的對象將需要傳遞的值存在firstValue中:

(void)buttonAction:(UIButton *)button

{

SecondViewController *second =

[[SecondViewController alloc]init];//用下一個視圖的屬性接受想要傳過去的值,屬性傳值

second.firstValue = _txtFiled.text;

[self.navigationControllerpushViewController:second animated:YES];

}

頁面跳轉之後,就能在SecondViewController視圖中,通過存值的屬性,取用剛才傳遞過來的值:

//顯示傳過來的值[_txtFiledsetText:_firstValue];//firstValue保存傳過來的值

2、通知傳值

通知中心NSNotificationCenter提供了一種更加解耦的方式。最典型的應用就是任何對象對可以發送通知到中心,同時任何對象可以監聽中心的通知。發送通知的代碼如下:

[[NSNotificationCenterdefaultCenter]postNotificationName:@」myNotificationName」object:broadcasterObject];註冊接收通知的代碼如下:

[[NSNotificationCenterdefaultCenter]addObserver:listenerObjectselector:@selector(receivingMethodOnListener:)name:@」myNotificationName」object:nil];註冊通知的時候可以指定一個具體的廣播者對象,但這不是必須的。你可能注意到了defaultCenter。實際上這是你在應用中會使用到的唯一的中心。通知會向整個應用開放,因此只有一個中心。同時還有一個NSDistributedNotificationCenter。這是用來應用間通信的。在整個計算機上只有一個該類型的中心。優點:通知的發送者和接受者都不需要知道對方。可以指定接收通知的具體方法。通知名可以是任何字元串。缺點:較鍵值觀察需要多點代碼。在刪掉前必須移除監聽者。不能傳大量數值,只能讓誰去做什麼事。

3、代理協議傳值

(1)、協議(protocol),就是使用了這個協議後,必須按照協議規定的內容來處理事情,協議中要求的方法必須實現(@optional的方法除外)。

protocol是一種語法,它提供了一個很方便的、實現delegate模式的機會。

定義protocol如下:

1. @protocolClassBDelegate<NSObject>

2. -(void)methodOne;

3. @optional

4. -(void)methodTwo:(NSString*)value;

5. @end

定義了一個ClassB的協議,這個協議中包含兩個方法,其中methodTwo為可選的。

在ClassA的頭文件(ClassA.h)中實現這個協議,如下代碼:

1. @interfaceClassA<ClassBDelegate>

2. @end

在ClassA的實現文件(ClassA.m)中實現ClassBDelegate的兩個方法,其中methodTwo可以不實現,如下:

1. -(void)methodOne{

2. //具體實現內容

3. }

4.

5. -(void)methodTwo:(NSString*)value{

6. //具體實現內容

7. }

(2)、代理(delegate),顧名思義就是委託別人辦事,當一件事情發生後,自己不處理,讓別人來處理。

delegate和protocol沒有關係。delegate本身是一種設計模式。是把一個類自己需要做的一部分事情,讓另一個類(也可以就是自己本身)來完成。

在ClassB的頭文件(ClassB.h)中定義一個代理如下:

1. @interfaceClassB

2. @property(nonatomic,unsafe_unretained)id<ClassBDelegate>delegate;

3. @end

這樣,當我們在ClassB的實現文件(ClassB.m)中遇到想讓別的類(如 ClassA)處理的問題時,就可以這樣

1. [self.delegatemethodOne];

2. [self.delegatemethodTwo:@"需要傳遞的值"];

版權聲明:本文為博主原創文章,未經博主允許不得轉載。


推薦閱讀:

(PHP)重新定向(轉向)到另一個頁面
經典·俞平伯散文選(頁面雜)
姐只是想幫老公買條內褲而已,姐打開頁面邪惡了
canonical去除重複內容頁面抓取
php 頁面三種跳轉

TAG:總結 | 頁面 |