タブバーベースのアプリケーションで、5つ以上のタブバーアイテムを使用しているので、そのうち4つを直接ビューに表示し、[その他]タブを選択して残りを利用できます。タブバーのアイテムが押されたとき、それがどれだったかを検出したい。
したがって、- (void)tabBarController:(UITabBarController *)tabBarCtrl didSelectViewController:(UIViewController *)viewController
メソッド、tabBarCtrl.selectedViewController.title
を使用してアイテムのタイトルを取得します。
これは、ビューに表示されているタブ(つまり、最初の4つのタブと[その他]タブ)で機能しますが、[その他]タブを押した後にリストに表示される残りのタブバーアイテムでは機能しません。
[もっと見る]リストからタブを選択すると、didSelectViewControllerメソッドが呼び出されないこともわかります。
押されたときにどのようにしてそれらを検出できますか?
前もって感謝します。
詳細セクションでUITabBarItemのタイトルを取得する方法
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"controller title: %@", viewController.title);
if (viewController == tabBarController.moreNavigationController)
{
tabBarController.moreNavigationController.delegate = self;
}
}
UIViewController
で次のコードを使用すると、選択したアイテムのインデックスにアクセスできます。 alwaysはタブのインデックスを返します。
_self.tabBarController.selectedIndex;
_
したがって、たとえば「More ...」タブに移動できる6つのアイテム、「5番目」のアイテムを選択すると、selectedIndexは4になります。 [その他]タブに移動して6番目のアイテムを選択すると、5が返されます。
編集: UITabBarItemの現在の位置を確認する場合は、次のようにできます。
最初に、XIBファイルで、各タブのtag
プロパティを編集して、1番目のタブにtag = 100、2nd-200、3rd-300などを設定する必要があります。
次に、ViewControllerで次のコードを追加します。
_UIViewController *selectedVC = [self.tabBarController.viewControllers objectAtIndex:self.tabBarController.selectedIndex];
int selectedItemTag = selectedVC.tabItem.tag;
_
次に、selectedItemTag
変数を使用して、それがどのviewControllerであるかを判別できます。この場合、これを行うことでselectedIndexを決定できます:selectedIndex = (selectedItemTag-100)/100
。
tag
プロパティはnotがUITabBarのカスタマイズ時に変更されるため、信頼できる:)
UITabBarDelegateメソッドを使用してタブが押されたことを検出できます: http://developer.Apple.com/library/ios/#documentation/uikit/reference/UITabBarDelegate_Protocol/Reference/Reference。 html#// Apple_ref/occ/intf/UITabBarDelegate
UITabBarControllerクラスをデリゲートにして、実装にメソッドを追加できます。
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
NSLog(@"tab selected: %@", item.title);
}
1。したがって、UITabBarControllerを使用している場合は、クラスにUITabBarControllerDelegateを実装させ、UITabBarControllerデリゲートを次のクラスに設定できます。 TabBarで選択された項目が変更されたときに通知を受ける必要があり、次にデリゲートメソッドをクラスに追加します。
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
このメソッド内では、UITabBarController selectedIndexプロパティを使用して、現在選択されているインデックスがどれかを知ることができます。
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController: (UIViewController *)viewController
{
NSLog(@"Selected index: %d", tabBarController.selectedIndex);
}
2。UITabBarだけを使用していない場合は、この投稿のKen PespisaとiCoderによる回答をここで追跡できます- Ken Pespisa and iCoder この投稿。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSLog(@"Selected index: %d", tabBarController.selectedIndex);
if (viewController == tabBarController.moreNavigationController)
{
tabBarController.moreNavigationController.delegate = self;
}
NSUInteger selectedIndex = tabBarController.selectedIndex;
switch (selectedIndex) {
case 0:
NSLog(@"click tabitem %u",self.tabBarController.selectedIndex);
break;
case 1:
NSLog(@"click me again!! %u",self.tabBarController.selectedIndex);
break;
default:
break;
}
}
[〜#〜] every [〜#〜]UITabBarItem
にタグを追加するので(インデックス5以上のものでも)。
次のコードを使用して、選択されたタブを追跡できます。
//MARK: - UITabBarControllerDelegate
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
if viewController == tabBarController.moreNavigationController {
tabBarController.moreNavigationController.delegate = self
} else {
setSelectedTabBarOption()
}
}
//MARK: - UINavigationControllerDelegate
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
setSelectedTabBarOption()
}
private func setSelectedTabBarOption() {
if let viewControllers = viewControllers {
let selectedController: UIViewController? = viewControllers.count > selectedIndex ? viewControllers[selectedIndex] : nil
if let tag = selectedController?.tabBarItem.tag {
//do whatever with your tag
}
}
}
タブバーコントローラーを使用している場合は、タブアイテムとビューコントローラー間のマッピングについて知らないようにする必要があります。それがタブバーコントローラーの仕事です。他の目的でタブバーを使用する場合は、UITabBarControllerを使用せずに、UITabBarを直接使用する必要があります。 UITabBarを使用する場合、独自のオブジェクトをタブバーのデリゲートとして設定でき、デリゲートは、選択されたアイテムが変更されるたびにメッセージを取得します。