1. 程式人生 > >iOS block傳值(逆傳)

iOS block傳值(逆傳)

block是個好東西,是蘋果官方推薦的一種方法,效率高,程式碼簡單,今天用block主要是做一個簡單傳,暫時不對block詳細介紹,關於__block的用法,後期會一一介紹;

接下來,通過一個block,將 SecondViewController 的數值傳給  FirstViewController ;

FirstViewController.m

#import "FirstViewController.h"
#import "SecondViewController.h"
@interface FirstViewController ()<UITextFieldDelegate>
{
    //切換到下一個介面
    UIButton *_btn;
    
    //現實從 SecondViewController 傳過來的值
    UILabel *_label;
}

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor: [UIColor yellowColor]];
    
    [self layouUI];
    
}

-(void)layouUI
{
//    建立lable
    _label=[[UILabel alloc] initWithFrame:CGRectMake(100, 60, 120, 40)];
    _label.backgroundColor=[UIColor whiteColor];
    [self.view addSubview:_label];
    
    //切換到 SecondViewController
    _btn=[[UIButton alloc]initWithFrame:CGRectMake(100, 220, 120, 40)];
    [_btn setBackgroundColor:[UIColor cyanColor]];
    [_btn addTarget:self action:@selector(dobtn) forControlEvents:UIControlEventTouchDown];
    [self.view addSubview:_btn];
}

-(void)dobtn
{
    SecondViewController *second=[[SecondViewController alloc]init];
    second.mb=^(NSString *str){
        _label.text=str;
    };
    [self.navigationController pushViewController:second animated:YES];
    
}
@end
執行結果如下圖:



建立第二個控制器:

SecondViewController.h

#import <UIKit/UIKit.h>

//定義block
typedef void(^Myblock)(NSString *str);

@interface SecondViewController : UIViewController

@property(strong,nonatomic)Myblock mb;


@end

SecondViewController.m

#import "SecondViewController.h"

@interface SecondViewController ()
{
    UIButton *_btn;
    UILabel *_label;
    UITextField *_textField;
}

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view setBackgroundColor:[UIColor purpleColor]];
    [self layouUI];
}
-(void)layouUI
{
    //    建立一個textfield
    _textField=[[UITextField alloc]initWithFrame:CGRectMake(100, 140, 120, 40)];
    _textField.borderStyle=UITextBorderStyleLine;
    [self.view addSubview:_textField];

    
    _btn=[[UIButton alloc]initWithFrame:CGRectMake(100, 220, 120, 40)];
    [_btn setBackgroundColor:[UIColor cyanColor]];
    [_btn addTarget:self action:@selector(dobtn) forControlEvents:UIControlEventTouchDown];
    [self.view addSubview:_btn];
}
-(void)dobtn
{
//    在這裡呼叫block
    self.mb(_textField.text);
    [self.navigationController popViewControllerAnimated:YES];
}

@end


然後在 _textField 寫入文字,例如寫 welcome to air

如下圖:


在第一個控制器上的label就會顯示出來第二控制器上寫的字串;

如下圖:


相關推薦

iOS block

block是個好東西,是蘋果官方推薦的一種方法,效率高,程式碼簡單,今天用block主要是做一個簡單傳,暫時不對block詳細介紹,關於__block的用法,後期會一一介紹; 接下來,通過一個block,將 SecondViewController 的數值傳給  First

vue元件通訊,點選,動態子,子

vue說到元件通訊,無非是父元件傳子元件,子元件傳父元件,跨級元件傳值,同級元件傳值,個人覺得,除了父子元件的傳值,其餘情況就可以用vuex來解決了,這篇先不說vuex,這裡介紹父子元件傳值。不會你打我! 一、父元件傳子元件,核心--props 下面是場景,點選傳值給子元

react 元件

<script type="text/babel">//父傳子   子元件獲取父元件資料var Child = React.createClass({return(<div><h2>子元件通過屬性傳值</h2><div>子元件獲取父元件內容 {thi

C#中兩個Form視窗之間的父->子子->父

首先定義兩個Form,一個為Form1,一個為Form2,其中Form1作為父視窗,Form2作為子視窗 1、父視窗傳值給子視窗       Form1中程式碼:         public Form1()         {             Initialize

Android 簡單EventBus登入介面與粘性事件

展示效果 新增EventBus匯入依賴 compile 'org.greenrobot:eventbus:3.0.0'11 主MainActivity方法 public classMainAc

iOS開發swift:頁面跳轉

副標題:.xib檔案的介面與.storyboard的介面相互跳轉 一、.storyboard檔案的介面跳轉到.xib檔案的介面 0.回顧:沿用上一篇文章裡.storyboard的介面。現在要實現點選綠色介面(.storyboard)按鈕跳轉至新的藍色介面(.xib)。 1.下面

weex-自定義module,實現weex在iOS的本地化,js之間互相跳轉,互動,iOS接入weex的最佳方式

博主學習weex也有一段日子了,以前寫的Demo都是屬於純weex的,最多就是把所有的js檔案引入Xcode專案中,通過載入本地的js檔案的方式來實現專案,但也僅僅只存在一個VC,相當於是內嵌了網頁的app,當然,weex的效能要好很多。 那麼接下來,博主將向

SSH框架學習------struts2前後臺

sts put ret req extends imp tps str rri struts2的Action類一般都會繼承(extends)ActionSupport類(Action類,即實現action的類)1.前傳後:jsp裏<input type="text"

iOS-AFNetworking3.0上大量1000張圖片到服務器

gre top defined 內存 agen con 完全 任務 自動 背景: 最近項目要做上傳圖片功能,圖片必須是高清的,所以不讓壓縮,上傳圖片是大量的,比如幾百張,這個如果是用afn,將圖片直接for循環加入到formData裏會出現一個問題,臨時變量太多,導致內

MVC Controller向ViewViewData與ViewBag

擴展方法 time gre 動態 操作 要求 name 由於 讀取 近在開發項目中,使用的是ASP.NET MVC由於之前並沒有接觸,對於它的傳值方式有些陌生,在這裏進行初步總結積累學習! 一:使用 ViewData使用: 在使用上,我們可以很明顯的看出這兩種方式的

向Spring-MVC WEB進行頁面繼續上章

8.使用RedirectView重定向 //8.使用RedirectView重定向 @RequestMapping("/test10.do") public ModelAndView test10(User user) { if(user.getUserName().equ

iOS Block、代理、通知中心

  Joker_King  關注 2016.04.18 22:17*  字數 802  閱讀 1792 評論 7 喜歡 12 在我們需

使用者沒有輸入前臺為空時的資料儲存原則

已知: 1、數值型資料可能會涉及到數學運算。 2、數值型別和日期時間型別,當儲存為空值‘’時,sqlserver會分別按預設值儲存(0、1900-01-01 00:00:00.000) 結論:暫時,先將前臺傳值為null或空值時,統一處理成空值‘’傳輸到後臺並儲存;但是應該注意將預設值按空值

vue 元件間個人精編

1.父元件向子元件傳值 1⃣️.子元件標籤繫結需要傳遞的引數名 2⃣️.子元件頁面使用props 接收引數 2.子元件向父元件傳值    1⃣️.子元件使用$emit來觸發一個自定義事件,並傳遞一個引數  2⃣️.父元件中的子標籤中監聽該自定義事件並

vue元件—父元件向子元件通過屬性繫結

注意: 1.資料繫結時,可能由於某種命名的規範方法或者屬性名字不能是帶有駝峰或者連字元的。並且繫結之後,還要放到子元件的 props資料後,方可呼叫。 2.子元件呼叫的父元件的屬性,只能讀不能寫。同時,子元件的屬性是其私有的,Ajax請求返回data屬性變化也只是子元件

Ajax前後端以下內容有些說法可能不是很準確,但能夠準確接收,僅作為筆記而已

傳一個或多個值: 前端:` /** * @type {{num: number}} */ var object1 = { "num":1, “name”:“張” }

web 專案中a標籤中文到後臺的亂碼問題

      當點選下一頁出現亂碼問題: 因為title向Servlet傳輸的是中文,所以點選下一頁會出現亂碼問題解決方法: JSP:  <script type="text/javascript">    var href=$("#redirect

Sql資料庫儲存過程傳遞資料表名,列名,sp_executesql函式的使用

遇到的專案需求是:對幾個不同的資料表和相應的欄位進行類似的操作,表的名稱和相關的列名可以作為儲存過程的引數傳遞,這樣可以使用遊標遍歷不同表格的不同的列,再使用相同函式求出返回值進行統一的處理。由於專案中表的資料龐大,關係複雜,此處做簡化處理,描述大致意思。(此處的資料庫是SQ

篇三、元件通訊非父子元件間 Vuex ~ 狀態管理

Vuex用法 vuex主要使用場景為大型單頁面應用,更適合多人協同開發。 vuex寫法多種,在此只寫兩種自認為最常用方案。 步驟一:vuex安裝、全域性引入 利用npm包管理工具安裝,命令列如下(注:在開發環境中安裝vuex時,需要加--

Android Intent兩個Activity之間傳遞資料

在兩個Activity之間傳遞資料,最終都是通過Intent傳遞,但設定資料和儲存資料方式有兩種(使用Intent 和 Bundle),分別對應如下: 設定資料(MainActivity.java) 方法一:1.直接用intent.putExtra(“name”,“張三”)