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 頁面三種跳轉