2013-08-04 29 views
0

我有兩個文本字段和一個按鈕。 我的目標是已啓用的按鈕,只有當這兩個文本字段有一些文字如何以編程方式禁用按鈕?

這是我做的。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    ..... 
    self.btnLogIn.enabled=NO; 
} 

我編程方式創建的文本字段,這是代碼:

UITextField *textField = [[UITextField alloc] init]; 
...... 
textField.delegate=self; 
[textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged]; 

這是事件處理程序:

-(void)textChanged:(UITextField *)textField 
{ 
    UITextField *txtPassword = (UITextField *)[self.view viewWithTag:102]; 
    UITextField *txtUsername = (UITextField *)[self.view viewWithTag:101]; 
    if([txtPassword.text length]>0 && [txtUsername.text length]>0) 
    { 
     self.btnLogIn.enabled=YES; 
    } 
    else 
    { 
     self.btnLogIn.enabled=NO; 
    } 
} 

我把THR ee斷點:

  • self.btnLogIn.enabled = NO; (in viewDidLoad)
  • self.btnLogIn.enabled = YES; (在textChanged中)
  • self.btnLogIn.enabled = NO; (在textChanged中)

當我運行該應用程序時,它會點擊所有brakpoint,但該按鈕仍處於啓用狀態。

如果我從設計器中取消選中啓用,它始終被禁用。

我在做什麼錯?

LE:我拖着在實現文件的按鈕來創建出口,這是代碼:

@property (weak, nonatomic) IBOutlet UIButton *btnLogIn; 
+1

您是否設置了插座,以便您可以在代碼中使用該按鈕? – Wain

+0

您是否正確連接到IB的按鈕插座? – DrummerB

+0

我在實現中拖動它併爲其指定一個名稱(btnLogin),我還需要做其他事情嗎?看起來我也必須做相反的事情,從設計者的按鈕上的實現文件拖動按鈕。奇怪。你可以添加這個評論作爲答案,我可以接受它嗎? – user2611691

回答

1

確保插座既已創建又連接。僅僅在代碼中創建插座是不夠的,您還需要連接它。當你從XIB拖出一個連接到代碼時,它爲你創建了一個插座,並且應該連接它,但是檢查它是否確實。您也有可能意外地解除了部分更改或破壞了連接。在運行時調試以檢查該變量不是nil也是第一個調用端口。

0

只要你有網點,這兩個文本字段的委託設置:

- (BOOL)textField:(UITextField *)textField 
    shouldChangeCharactersInRange:(NSRange)range 
       replacementString:(NSString *)string { 

    NSString *completeText = 
     [textField.text stringByReplacingCharactersInRange:range 
               withString:string]; 
    self.button.enabled = completeText.length && 
     textField == firstTextField ? 
       otherTextField.length : 
       firstTextField.length; 

} 
0

你能使用驗證文本字段:

 if(txtPassword.text >0 && txtUsername.text >0){ 

// Code here for login process 
    } 

else{ 

    // Code here to inform user nothing has been entered for example a UIAlert 
} 

或可能用途:

 if(txtPassword.text == nil && txtUsername.text == nil){ 
      // Code here to inform user nothing has been entered for example a UIAlert 
    } 

else{ 

// Code here for login process 

} 

,而不是加:self.btnLogIn.enabled=NO;你能不能只用btnLogIn.UserInteractionEnabled = NO;,然後將其設置回btnLogIn.UserInteractionEnabled = YES;如果需要

相關問題