簡體   English   中英

UITextField沒有辭職鍵盤

[英]UITextField not resigning keyboard

我一直在牆上抨擊我的頭一段時間,但我還是沒有設法解決這個問題。

我有一個modalViewController,上面有一個UITextField(我們稱之為myTroubleMaker)和其他一些非重要的組件。 當我加載modalVC時,我初始化UITextField並允許它立即成為firstResponder,我也將它的委托設置為modalVC(self)。 modalView可以很好地加載UITextField並立即打開鍵盤。 但是,當我觸摸/點擊屏幕上的任何其他位置時,它不會解除鍵盤。 它確實將焦點從UITextField切換出來並重新啟動firstResponder但鍵盤沒有消失。

造成這個棘手問題的原因是什么? 我該如何正確解決這個問題?

碼:

。H

@interface myModalViewController : UIViewController <UItextFieldDelegate>
{
    UITextField *myTroubleMaker;
}

@property (nonatomic, retain) UITextField *myTroubleMaker;

@end

.M

//I synthesized it properly
-(void)loadView
{
    [super loadView];

    self.myTroubleMaker = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 300, 50)];
    self.myTroubleMaker.backgroundColor = [UIColor clearColor]; 
    self.myTroubleMaker.textColor = [UIColor whiteColor];
    self.myTroubleMaker.text = @"";
    self.myTroubleMaker.font = [UIFont systemFontOfSize:self.myTroubleMaker.frame.size.height - 8];
    self.myTroubleMaker.adjustsFontSizeToFitWidth = YES;
    self.myTroubleMaker.minimumFontSize = 0.0;
    self.myTroubleMaker.textAlignment = UITextAlignmentCenter;
    self.myTroubleMaker.autocorrectionType = UITextAutocorrectionTypeNo;
    self.myTroubleMaker.delegate = self;
    self.myTroubleMaker.placeholder = @"I eat ur brainz, yoh!";
    self.myTroubleMaker.keyboardType = UIKeyboardTypeDefault;
    self.myTroubleMaker.returnKeyType = UIReturnKeyDone;
    [self.view addSubview:self.tabNameInputField];   
    [self.myTroubleMaker becomeFirstResponder];
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    self.tabNameInputField.text = @"";
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
{  
    UITouch *touch = [[event allTouches] anyObject];

    if ([touch view] == someOtherModalVCComponent) {
        //do stuff

        if([self.tabNameInputField isFirstResponder])
        {
            [self.tabNameInputField resignFirstResponder];
        }

        [self loadGraphics];
    }

    if ([touch view] != self.myTroubleMaker) 
    {
        if([self.myTroubleMaker isFirstResponder])
        {
            [self.myTroubleMaker resignFirstResponder];
        }
    }
}

這一切都按照我想要的方式工作,除了鍵盤的這種思維問題。 即使在我寫這個問題時,我也檢查了類似問題的可能解決方案。

任何幫助,將不勝感激。 我在這里頭疼...


解決了我接受的解決方案。

對於將來的參考,我使用devforums.apple.com/message/425914來獲取我的具體解決方案。 由於我使用navigationController傳遞modalVC,我需要在UINavigationController上創建一個類別並將其方法添加到它,因此它支持自動解除鍵盤。

您可能正在使用UIModalPresentationFormSheet進行UIModalPresentationFormSheet 如果是,那么iPad上的一項功能是鍵盤不會被解雇。

在iOS4上有一個新方法disablesAutomaticKeyboardDismissal:如果你覆蓋它以擺脫默認行為,它可能會幫助你。

http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/disablesAutomaticKeyboardDismissal

一種選擇是實現自定義UIButton並將其發送到根視圖的后面。 在按鈕的單擊,辭職您的第一響應者。

還有更多解決方案,如其他答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM