2013-04-29 74 views
-2

LoginController嘗試簡單登錄嘗試 - 如果其成功,則調用setEmail,leftcontroller無法隱藏以編程方式創建的UIButton?

所有我需要做的,當setEmail被調用是隱藏btnLogin並顯示buttonUser並沒有什麼我嘗試工作。 NSLog被調用,EventsController加載使setEmail正在工作 - 它不會隱藏和顯示按鈕。

leftcontroller.h

@interface LeftController : UIViewController <UIApplicationDelegate> 
{ 
    IBOutlet UIButton *btnLogin; 
    IBOutlet UIButton *buttonUser; 
    NSString *setEmail; 
} 
@property (nonatomic,strong) IBOutlet UIButton *btnLogin; 
@property (nonatomic,strong) IBOutlet UIButton *buttonUser; 

@property(nonatomic,strong) UITableView *tableView; 
@property(nonatomic) NSString *Email; 

//-(void) setEmail : (NSString *) Email; 

@end 

leftcontroller.m

- (void) setEmail : (NSString *) Email{ 
    [buttonUser setTitle:Email forState:UIControlStateNormal]; 
    //btnLogin.hidden = YES; 
    //buttonUser.hidden = NO; 
    [btnLogin setHidden:YES]; 
    [buttonUser setHidden:NO]; 

    NSLog(@"Set Email Called"); 
    NSLog(@"email: %@", Email); 

    DDMenuController *menuController = (DDMenuController*)((AppDelegate*)[[UIApplication sharedApplication] delegate]).menuController; 
    EventsViewController *controller = [[EventsViewController alloc] init]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; 

     [menuController setRootController:navController animated:YES]; 
} 

-(void)viewDidLoad { 
    [super viewDidLoad]; 

    self.view.backgroundColor = HEXCOLOR(0x000000); 

    btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    btnLogin.frame = CGRectMake(0, 0, 180.f, 48); 
    [btnLogin setTitle:@"Login" forState:UIControlStateNormal]; 
    [btnLogin addTarget:self action:@selector(LoginPressed) 
     forControlEvents:UIControlEventTouchUpInside]; 
    btnLogin.tag=1; 

    btnLogin.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
    [btnLogin setTitleColor: [UIColor whiteColor] forState:UIControlStateNormal]; 
    btnLogin.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 

    UIImage *btnImage = [UIImage imageNamed:@"nav_top.png"]; 
    [btnLogin setBackgroundImage:btnImage forState:UIControlStateNormal]; 
    [self.view addSubview:btnLogin]; 

    buttonUser = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    buttonUser.frame = CGRectMake(0, 0, 180.f, 48); 
    //[buttonUser setTitle:_Email forState:UIControlStateNormal]; 
    [buttonUser addTarget:self action:@selector(EmailPressed) 
     forControlEvents:UIControlEventTouchUpInside]; 
    buttonUser.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
    [buttonUser setTitleColor: [UIColor whiteColor] forState:UIControlStateNormal]; 
    buttonUser.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 

    UIImage *btnImage1 = [UIImage imageNamed:@"nav_top.png"]; 
    [buttonUser setBackgroundImage:btnImage1 forState:UIControlStateNormal]; 
    [self.view addSubview:buttonUser]; 
    buttonUser.hidden = YES; 
} 
+0

按鈕是在XIB中定義的插座還是代碼中的變量或兩者兼而有之? – Wain 2013-04-29 16:49:53

+0

no xib - 我不認爲我需要IBOutlet - 只是嘗試不同的事情,試圖讓它工作 – lsiunsuex 2013-04-29 17:03:42

+0

http://stackoverflow.com/questions/4498400/cant-programmatically-hide-uibutton-created-with -ib?rq = 1 – matt 2013-04-29 17:13:32

回答

4

此行是犯罪嫌疑人:

btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
// ... 
[self.view addSubview:btnLogin]; 

如果要創建btnLogin並將其添加到self.view自己,在代碼中,然後爲什麼是這樣的n outlet?

@property (nonatomic,strong) IBOutlet UIButton *btnLogin; 

一個出口的東西,已經存在,並且在你的筆尖實例。因此,在我看來,你可能有兩個對象,其中一個對象將你的引用擦除掉。而另一個按鈕也一樣。

0

你沒有設置你的財產,替換:

btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

有:

self.btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

,並定義像你的財產:

@property (nonatomic,strong) UIButton *btnLogin; 

執行相同的buttonUser

+2

如果按鈕是在代碼中創建的,爲什麼要將該屬性標記爲IBOutlet? – rmaddy 2013-04-29 16:59:33

+0

我的不好意思是要指出它不應該被標記爲出口,但忘記刪除,感謝捕捉。 – 2013-04-30 15:57:01

0

設置你的按鈕的hidden後,您立即說

[menuController setRootController:navController animated:YES];} 

這表明,你正在改變接口。但是如果你正在改變界面,你真的可以告訴你的按鈕是否改變了嗎?我不知道你在這裏做什麼,但也許你的按鈕不再在界面中。也許你在界面上看到的是不同的按鈕組。

+0

左側控制器(這是按鈕所在的位置)是https://github.com/devindoty/DDMenuController的一部分 - 導航欄按鈕會拉出菜單,單擊登錄(然後登錄)並加載事件控制器 - 左側控制器永遠不會被卸載 - 它只是隱藏了 – lsiunsuex 2013-04-29 17:14:01

+0

這些按鈕位於左側控制器中。如果左側控制器隱藏,你怎麼知道按鈕沒有改變?你不能再看到它們了。 – matt 2013-04-29 17:15:31

+0

認爲facebook ios應用程序 - 菜單拉出導航欄按鈕 - 所以當我登錄後,我再次擊中該導航欄按鈕,登錄按鈕hasen't變得隱藏 – lsiunsuex 2013-04-29 17:18:57