- 獲得當(dāng)前 Component 所屬 ViewController 的辦法(這是后續(xù)各個操作的基礎(chǔ))
- 創(chuàng)建或找到一個現(xiàn)成的 BridgeModule 類
- 在該 BridgeModule 類的 .m 文件中菱阵,確保包含
#import "UIView+React.h"
- 在 @implementation 中颁褂,確保包含
@synthesize bridge = _bridge;
- 在 @implementation 中席里,RCT_EXPORT_METHOD 一個 Bridge 方法
RCT_EXPORT_METHOD( sometingToDoWithTheViewControllerOfTheComponent:(nonnull NSNumber *)reactTag // Component 對象的 reactTag resolver:(RCTPromiseResolveBlock)resolve // 這行 rejecter:(RCTPromiseRejectBlock)reject // 和這行是可選的签则,如果需要在執(zhí)行完畢后給 JavaScript 通知的話遥诉,就帶上 ) { // 實現(xiàn)后文詳述 }
- 在 Bridge 方法中拇泣,通過如下代碼取得 reactTag 對應(yīng)的 view,并基于該 view 取得它所對應(yīng)的 viewController
RCTUIManager *uiManager = _bridge.uiManager; dispatch_async(uiManager.methodQueue, ^{ [uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) { UIView *view = viewRegistry[reactTag]; UIViewController *viewController = (UIViewController *)view.reactViewController; // It's now ok to do something with the viewController // which is in charge of the component. } }
- 導(dǎo)航到其它 ViewController 的辦法
- 基于上述辦法取到當(dāng)前 Component 所屬的 ViewController
- 通過如下代碼取得它所屬的 navigationController矮锈,調(diào)用它的 pushViewController 或 presentViewController 方法即可
[viewController.navigationController pushViewController:anotherViewController animated:YES]; // 跳轉(zhuǎn) [viewController.navigationController presentViewController:anotherViewController animated:YES completion:^{}] ;// 彈出
- 完整代碼如下:
RCT_EXPORT_METHOD ( pushViewControllerXYZ:(nonnull NSNumber *)reactTag resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject ) { RCTUIManager *uiManager = _bridge.uiManager; dispatch_async(uiManager.methodQueue, ^{ [uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) { UIView *view = viewRegistry[reactTag]; UIViewController *viewController = (UIViewController *)view.reactViewController; [viewController pushViewController:[ViewControllerXYZ new] animated:YES]; resolve(nil); } } }
RCT_EXPORT_METHOD ( presentViewControllerXYZ:(nonnull NSNumber *)reactTag resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject ) { RCTUIManager *uiManager = _bridge.uiManager; dispatch_async(uiManager.methodQueue, ^{ [uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) { UIView *view = viewRegistry[reactTag]; UIViewController *viewController = (UIViewController *)view.reactViewController; [viewController presentViewController:[ViewControllerXYZ new] animated:YES completion:^{}]; resolve(nil); } } }
- 更新當(dāng)前 ViewController 的 navigationItem 屬性的辦法
- 基于上述辦法取到當(dāng)前 Component 所屬的 ViewController
- 通過如下代碼取得它對應(yīng)的 navigationItem霉翔,然后各個屬性隨便設(shè)
viewController.navigationItem.title = @"Hello"; viewController.navigationItem.prompt = @"Aloha";
- 如果希望設(shè)置 navigationItem 的 titleView 為某個 React Native Component:
RCT_EXPORT_METHOD ( setTitleView:(nonnull NSNumber *)reactTag props:(NSDictionary *)props resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject ) { UIView *titleView = [[RCTRootView alloc] initWithBridge:_bridge moduleName:[props objectForKey:@"moduleName"] initialProperties:[props objectForKey:@"initialProperties"]]; viewController.navigationItem.titleView = titleView; }
- 如果希望設(shè)置 navigationItem 的 left、right苞笨、back 按鈕:
- 以 React Native 為 view 的通用 ViewController 的實現(xiàn)辦法
- ~
[React Native] 在 iOS 中刑峡,關(guān)于 ViewController 的二三事
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門磁奖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人某筐,你說我怎么就攤上這事比搭。” “怎么了怠苔?”我有些...
- 文/不壞的土叔 我叫張陵蟆湖,是天一觀的道長劲室。 經(jīng)常有香客問我,道長谓苟,這世上最難降的妖魔是什么仑撞? 我笑而不...
- 正文 為了忘掉前任搀缠,我火速辦了婚禮,結(jié)果婚禮上近迁,老公的妹妹穿的比我還像新娘艺普。我一直安慰自己,他們只是感情好鉴竭,可當(dāng)我...
- 文/花漫 我一把揭開白布歧譬。 她就那樣靜靜地躺著,像睡著了一般搏存。 火紅的嫁衣襯著肌膚如雪瑰步。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼题翻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腰鬼?” 一聲冷哼從身側(cè)響起嵌赠,我...
- 正文 年R本政府宣布赏参,位于F島的核電站志笼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏把篓。R本人自食惡果不足惜纫溃,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望韧掩。 院中可真熱鬧紊浩,春花似錦、人聲如沸疗锐。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽滑臊。三九已至口芍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雇卷,已是汗流浹背鬓椭。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- { 11脱货、核心動畫 需要簽協(xié)議岛都,但是系統(tǒng)幫簽好 一、CABasicAnimation 1振峻、創(chuàng)建基礎(chǔ)動畫對象 CAB...
- 本文將講述下在原生和React Native之間的通信方式臼疫。方式和邏輯綜合了自己的思維方式,主要參考了React ...
- 第2章 史上最變態(tài)嬰兒 “嘿嘿!”黑心道士我抽著煙,帶著對毀滅世界的無盡美好期待鸽斟,慢悠悠地拽進了嬰兒房拔创。 走進嬰兒...