2012-11-07 90 views
0

我想實現自定義AlertView。UIAlertView文本框捕獲onchange

這個想法是讓alertview帶有文本框和取消按鈕。

我不能做的是檢查輸入字符的文本字段。我知道我可以使用– alertViewShouldEnableFirstOtherButton:但我不想要另一個按鈕。我希望沒有按鈕就做同樣的事情。

在android中,您可以將偵聽器添加到onchange的文本字段。

試圖使用這個uitextfield函數來做到這一點,但它並沒有被調用,或者我可能以錯誤的方式使用它。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    textField = [alert textFieldAtIndex:0]; 
    if ([textField.text length] == 0) 
    { 
     NSLog(@"Hello"); 
     return NO; 
    } 
    return NO; 
} 

那麼如何正確地做到這一點?

+1

您是否設置了文本字段委託? –

+0

Nop ..我該怎麼做,在哪裏做?對不起,我還不清楚委託人的清晰想法。 – Datenshi

+0

只是看到我的答案,它工作正常... –

回答

2

試試這個

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"New List Item", @"new_list_dialog") 
                  message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; 
    UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)]; 
    myTextField.delegate = self; 
    [myTextField setBackgroundColor:[UIColor whiteColor]]; 
    [myAlertView addSubview:myTextField]; 
    [myAlertView show]; 
    [myAlertView release]; 

和文本字段方法

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
    NSLog(@" %@", [textField.text stringByReplacingCharactersInRange:range withString:string]); 
    return YES; 
} 
+0

對不起,它表示委託方法中的不兼容類型,從UItextfielddelegate到MYCLASSNAME。但是謝謝你的時間期待這一點。王子已經回答了我的問題與工作解決方案 – Datenshi

+2

這很好,你已經找到解決方案..但是這個代碼工作很好...我測試了它..可能你忘了在你的類中設置這一行.h文件UIViewController < UITextFieldDelegate>。 –

+0

你說得對,我還沒有那樣做。您的解決方案也完美運作。不過,我會離開王子解決方案,因爲它早些時候發佈。感謝您的幫助! – Datenshi

1

您可以爲UITextFieldTextDidChangeNotification添加觀察者,只要textchangestextfield中即可發佈該觀察者。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(controlTextDidChange:) 
    name:UITextFieldTextDidChangeNotification object:[alert textField]]; 

選擇低於:

- (void)controlTextDidChange:(NSNotification *)notification { 
{ 
    if ([notification object] == [alert textField]) 
    { 
     // [alert textField] has changed 
    } 
} 

編輯removeObserverfinish

[[NSNotificationCenter defaultCenter] removeObserver:UITextFieldTextDidChangeNotification]; 
+0

偉大。它的工作方式與預期一致。非常感謝你。猜猜我必須看看NotificationCentre參考。 – Datenshi

+0

還有一件事...當你不需要這個時,只需移除這個觀察者。 –

+0

檢查已編輯的答案.... –