使用this教程我設置了一個自定義TabBar。不幸的是,本教程不會介紹如何在不希望顯示的視圖中隱藏自定義TabBar。按鈕不會隱藏在自定義TabBar中
在我customTabBar.h
我定義
- (void) hideAlsoCustomTabBar;
- (void) showCustomTabBarAgain;
被實現爲
- (void) hideAlsoCustomTabBar {
btn1.hidden = YES;
btn2.hidden = YES;
btn3.hidden = YES;
btn4.hidden = YES;
}
- (void) showCustomTabBarAgain {
btn1.hidden = NO;
btn2.hidden = NO;
btn3.hidden = NO;
btn4.hidden = NO;
}
調用這些內部CustomTabBar.m
的viewDidAppear
工作正常,究竟做什麼,我希望他們做的事。如果我嘗試調用從視圖控制器的方法,我需要隱藏的TabBar這樣
[customTabs hideAlsoCustomTabBar];
的initWithNibName
或viewDidLoad
或viewWillAppear
裏面,什麼都不會發生。我檢查了NSLog,方法被調用,但是當我讀出BOOL的任何按鈕.hidden
屬性時,它返回0,當它應該是1(對於hidden==YES
)。 我不知道我的設置有什麼問題。是否有可能這些按鈕的屬性默認爲私有,因爲CustomTabBar
繼承自UITabBarController
,我無法設置它們?或者我在通話中犯了錯誤?
謝謝! EDIT ,因爲它在教程描述使用TabBar實施
import "CustomTabBar.h"
@implementation CustomTabBar
@synthesize btn1,btn2,btn3,btn4;
- (void) viewDidAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self hideExistingTabBar];
[self addCustomElements];
}
- (void) hideExistingTabBar {
for (UIView *view in self.view.subviews) {
if ([view isKindOfClass:[UITabBar class]]) {
view.hidden = YES;
break;
}
}
}
- (void) addCustomElements {
//Initialise the two images for btnEinleitung, not selected and selected
UIImage *btnImage = [UIImage imageNamed:@"btnEinl.png"];
UIImage *btnImageSelected = [UIImage imageNamed:@"btnEinl_s.png"];
self.btnEinleitung = [UIButton buttonWithType:UIButtonTypeCustom];
btnEinleitung.frame = CGRectMake(0, 430, 86, 50);
[btnEinleitung setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnEinleitung setBackgroundImage:btnImageSelected forState:UIControlStateSelected];
[btnEinleitung setTag:0];
[btnEinleitung setSelected:true];
//set other buttons
btnImage = [UIImage imageNamed:@"btnUbg.png"];
btnImageSelected = [UIImage imageNamed:@"btnUbg_s.png"];
self.btnUebungen = [UIButton buttonWithType:UIButtonTypeCustom];
btnUebungen.frame = CGRectMake(86, 430, 80, 50);
[btnUebungen setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnUebungen setBackgroundImage:btnImageSelected forState:UIControlStateSelected];
[btnUebungen setTag:1];
/* do the same for btn3 and btn4*/
//add custom buttons to view
[self.view addSubview:btn1];
[self.view addSubview:btn2];
[self.view addSubview:btn3];
[self.view addSubview:btn4];
//setup event handlers so the buttonClicked method will respond to the touch up inside event
[btn1 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[btn2 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[btn3 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[btn4 addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
}
//set tab to active according to the passed tag number
- (void) selectTab:(int)tabID {
switch (tabID) {
case 0:
[btnEinleitung setSelected:TRUE];
[btnUebungen setSelected:FALSE];
[btnTipps setSelected:FALSE];
[btnBrauchtum setSelected:FALSE];
btnEinleitung.userInteractionEnabled = NO;
btnUebungen.userInteractionEnabled = YES;
btnTipps.userInteractionEnabled = YES;
btnBrauchtum.userInteractionEnabled = YES;
break;
case 1:
[btnEinleitung setSelected:FALSE];
[btnUebungen setSelected:TRUE];
[btnTipps setSelected:FALSE];
[btnBrauchtum setSelected:FALSE];
btnEinleitung.userInteractionEnabled = YES;
btnUebungen.userInteractionEnabled = NO;
btnTipps.userInteractionEnabled = YES;
btnBrauchtum.userInteractionEnabled = YES;
break;
// and so on for 2 and 3
}
self.selectedIndex = tabID;
}
//get the tag of the sender/pressed button, call the function selectTab
- (void) buttonClicked:(id)sender {
int tagNum = [sender tag];
[self selectTab:tagNum];
}
EDIT 如下所述,我有4個標籤中的TabBar其用IB產生,加入導航控制器,其ViewControllers,爲這些人制作Outlets並通過IB連接它們。 單擊第二個選項卡(例如sndMenuVC)將打開一個包含4個按鈕的視圖。點擊其中一個按鈕會導致另一個視圖(例如detailVC),其中我不希望顯示TabBar。 detailVC有它自己的筆尖。
開幕detailVC與按鈕的動作發生聲明如下
- (IBAction) openFourth:(id)sender{
detailVC *detailView = [[detailVC alloc] initWithNibName:@"detailVC" bundle:nil andSender:kFourthButtonSender];
[self.navigationController pushViewController:detailView animated:YES];
[detailView release];
}
由於這是一個自定義的initWithNibName,這是我如何實現它
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil andSender: (NSString *)calledByButton{
self.callingButton = calledByButton;
[super initWithNibName:@"detailVC" bundle:nil];
return self;
}
所以我基本上只設置一個全局變量「callingButton」根據傳送的發送者,然後調用「正常」initWithNibName。
這一切工作正常。
如果我嘗試調用hideAlsoCustomTabBar
,NSLog btn1.hidden的值從detailVC調用時返回0,但在CustomTabBar中調用時返回1,並實際隱藏按鈕。
如果需要,我將customTabs作爲IBOutlet,但不知道它是否正確連接到CustomTabBar類型的TabBarController。
希望這有助於理解我:)如果你需要的任何其他信息,只是讓我知道。 謝謝!
你確定你得到這個工作是否正常?你聲明一個方法如' - (void)hideAlsoCustomTabBar;'並實現' - (void)hideAlsoCustomTabBar:(int)wert {'。這應該會導致錯誤。 – 2011-06-07 13:19:36
@Deepak對不起,:(int)wert只是用於我的代碼中的測試目的,我不需要它,並將編輯我的條目以適應它! – Nareille 2011-06-07 15:27:32
'customTabs'如何設置? – 2011-06-07 15:37:50