2013-04-29 3 views
-2

LoginController 간단한 시도 로그인 시도 - 성공한 경우 을 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

+0

xib 없음 - IBOutlet이 필요 없다고 생각했습니다. 단지 다른 것을 시도해 보려고 노력한 것입니다. – lsiunsuex

+0

http://stackoverflow.com/questions/4498400/cant-programmatically-history-uibutton-created-with -ib? rq = 1 – matt

답변

4

이 줄은 용의자 :

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

그런 다음, btnLogin를 생성하고 코드에서 자신 self.view에 추가하는 경우 왜 그런가요? n 콘센트에요?

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

아웃렛은 이미이 존재하고 펜촉에 인스턴스화 뭔가입니다. 따라서 두 개의 btnLogin 개체가있을 수 있으며 그 중 하나는 다른 개체에 대한 참조를 삭제합니다. 그리고 다른 버튼도 마찬가지입니다.

btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

로 :

self.btnLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

을 그리고처럼 속성을 정의 : 당신은 당신의 속성을 설정하지 않는

0

, 대체

@property (nonatomic,strong) UIButton *btnLogin; 

buttonUser에 대해 동일한 작업을 수행합니다.

+2

버튼이 코드에서 생성 된 경우 왜 속성을 'IBOutlet'으로 표시하겠습니까? – rmaddy

+0

나는 그것을 콘센트로 표시해서는 안된다는 것을 지적했지만, 그것을 빼는 것을 잊어 버렸다. –

0

하여 버튼의 hidden를 설정 한 후, 즉시 이것은 당신이 인터페이스를 변경하는 것을 제안

[menuController setRootController:navController animated:YES];} 

을 말하고있다. 그러나 인터페이스를 변경하는 경우 버튼이 변경되었는지 여부를 실제로 알 수 있습니까? 나는 네가 뭘하고 있는지 모르지만, 아마도 버튼이 더 이상 인터페이스에 없다. 어쩌면 인터페이스에서 볼 수있는 것은 다른 버튼 집합입니다.

+0

왼쪽 컨트롤러 (단추가있는 곳)는 https://github.com/devindoty/DDMenuController와 별개입니다. navbar 단추는 메뉴를 끌어오고, 로그인을 클릭 한 다음 (왼쪽 로그인) 이벤트 컨트롤러를로드합니다. 컨트롤러가 언로드되지 않습니다. 그냥 숨겨집니다. – lsiunsuex

+0

버튼이 왼쪽 컨트롤러에 있습니다. 왼쪽 컨트롤러가 숨기는 경우 버튼이 변경되지 않는다는 것을 어떻게 알 수 있습니까? 더 이상 볼 수 없습니다. – matt

+0

facebook ios app를 생각해보십시오 - 메뉴가 탐색 바 버튼을 클릭하면 빠져 나옵니다 - 로그인을 클릭하면 탐색 바 버튼을 다시 누르면 로그인 버튼이 숨겨지지 않습니다. – lsiunsuex

관련 문제