iOS開發之TabBar再次點選實現重新整理
需求
之前已經實現了自定義TabBar,如圖所示:
現在需要實現一個類似今日頭條TabBar的功能 —— 如果繼續點選當前TabBar的選中項,那麼該介面需要重新整理UITableView。
分析
既然已經自定義了TabBar,那麼最簡單的就是在自定義中給TabBar中需要的UITabBarButton
新增事件 —— 點選就傳送通知,並且將當前的索引傳出去。對應的介面監聽通知,拿到索引比對,如果和當前索引一致,就執行對應的操作。
實現
- 自定義TabBar的layoutSubviews中繫結事件
- (void)layoutSubviews
{
[super layoutSubviews];
for (UIButton * tabBarButton in self.subviews) {
if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
//監聽tabbar的點選
//繫結tag 標識
tabBarButton.tag = index;
//監聽tabbar的點選
[tabBarButton addTarget:self action:@selector(tabBarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
}
}
}
- 監聽事件,傳送通知
- (void)tabBarButtonClick:(UIControl *)tabBarBtn{
//判斷當前按鈕是否為上一個按鈕
//再次點選同一個item時傳送通知出去 對應的VC捕獲並判斷
if (self.previousClickedTag == tabBarBtn.tag) {
[[NSNotificationCenter defaultCenter] postNotificationName:
@"DoubleClickTabbarItemNotification" object:@(tabBarBtn.tag)];
}
self.previousClickedTag = tabBarBtn.tag;
}
- 對應的UIViewController監聽通知
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(doubleClickTab:) name:@"DoubleClickTabbarItemNotification" object:nil];
}
- 監聽到通知,比對後執行操作
-(void)doubleClickTab:(NSNotification *)notification{
//這裡有個坑 就是直接用NSInteger接收會有問題 數字不對
//因為上個介面傳過來的時候封裝成了物件,所以用NSNumber接收後再取值
NSNumber *index = notification.object;
if ([index intValue] == 1) {
//重新整理
}
}
2018.4.28 補充
本文被轉載後,有很多好心的讀者進行批評指正:這種方式不夠優雅,不夠簡單。怎麼最簡單呢?其實只要重寫UITabBarController
的代理就可以實現,方法如下
//這個是UITabBarController的代理方法
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
// 判斷哪個介面要需要再次點選重新整理,這裡以第一個VC為例
if ([tabBarController.selectedViewController isEqual:[tabBarController.viewControllers firstObject]]) {
// 判斷再次選中的是否為當前的控制器
if ([viewController isEqual:tabBarController.selectedViewController]) {
// 執行操作
NSLog(@"重新整理介面");
return NO;
}
}
return YES;
}
相關文章
- JavaScript實現單擊全選 ,再次點選取消全選JavaScript
- iOS開發之UITableView聯動實現城市選擇器iOSUIView
- [分享]iOS開發-圖片點選點選放大iOS
- Android開發之SwipeRefreshLayout實現下拉重新整理Android
- tabbar凸起點選事件處理tabBar事件
- iOS開發之微信聊天頁面實現iOS
- android短影片開發,點選兩次實現不同點選效果的實現方式Android
- iOS 實現點選微信頭像效果iOS
- 點選驗證碼不能實現重新整理問題
- iOS 開發之模糊效果的五種實現iOS
- Android開發之TabLayout實現頂部選單AndroidTabLayout
- vue點選當前路由,如何實現重新整理當前頁Vue路由
- iOS開發基礎136-防暴力點選iOS
- iOS自定義tabBariOStabBar
- CoreText實現圖文混排之點選事件事件
- ios開發實現畫板功能iOS
- 鄭州iOS點 - 點哥教你去掉Tabbar上沿陰影線iOStabBar
- 彩色 TabBar 切換動畫實現tabBar動畫
- (iOS)點選cell推出現新介面iOS
- iOS開發實用軟體之NWPusheriOS
- Android之點選Home鍵後再次開啟導致APP重啟問題AndroidAPP
- Android開發之ViewPager+Fragment+FragmentTabHost實現底部選單AndroidViewpagerFragment
- IOS之UIDatePicker實現時間日期選擇iOSUI
- iOS開發登入頁面的實現iOS
- iOS開發-探索scrollView的實現iOSView
- iOS開發之ImageView複用實現圖片無限輪播iOSView
- 語音交友app開發,點選按鈕出現彈窗的實現方式APP
- Ext實現點選節點,父子節點反選
- js實現的按鈕不用人為點選就觸發點選事件JS事件
- iOS 開發之— NSURLProtocoliOSProtocol
- iOS開發之WebViewiOSWebView
- iOS開發之GCDiOSGC
- Android開發之GridView實現彈出式選擇器AndroidView
- iOS開發中動畫之點贊圖示放大效果iOS動畫
- iOS 開發之 NSURLSession 下載和斷點續傳iOSSession斷點
- 實現QQ的TabBar拖拽動效tabBar
- jQuery如何實現點選Enter鍵觸發事件jQuery事件
- iOS實現點選圖片放大&長按儲存圖片iOS