簡體   English   中英

為什么UISearchBar即使在被設置為第一響應者之后也沒有獲得焦點?

[英]Why UISearchBar does not get Focus even after it is set as a first responder?

當UIViewController第二次被推送到導航控制器時,為什么UISearchBar沒有得到Focus並且鍵盤沒有出現? 似乎整個視圖中的任何元素都沒有焦點。

我的用例 :我有2個視圖控制器:A和B.轉換是A-> B. A,B被推送到導航控制器。

  1. 當我第一次顯示B 時,焦點設置為搜索欄並且鍵盤出現.OK。
  2. 然后我回到A.再次從A-> B。 現在第二次 沒有焦點鍵盤也沒出現 這是錯誤的。

我的代碼 :在B UIViewController上創建了與搜索欄的IBOutlet連接:

@property (weak, nonatomic) IBOutlet UISearchBar *mySearchBar;

mySearchBar的代表也已設置。 我在viewDidAppear方法中將焦點放在B UIViewController中的搜索viewDidAppear

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];   
    [self performSelector:@selector(setCorrectFocus) withObject:NULL afterDelay:0.2];
}

-(void) setCorrectFocus {
     [self.mySearchBar becomeFirstResponder];
}

控制器之間的轉換是通過以下代碼手動完成的:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"myStoryboard" bundle:nil];
AController *a = [storyboard instantiateViewControllerWithIdentifier:@"A"];
[self.navigationController pushViewController:a animated:NO];

試試這個

-(void)viewDidAppear:(BOOL)animated
{
     [super viewDidAppear:animated];   
     [self setCorrectFocus];
}

-(void)setCorrectFocus 
{
     [self.mySearchBar becomeFirstResponder];
}

經過長時間的搜索,我發現了錯 在故事板的某處,UISearchBar的舊連接名為mySearchbar。 我必須糾正的另一件事是該方法

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;

每次我回到之前的控制器時都返回NO 但它應該返回YES以便下次能夠將焦點設置在搜索欄上。

與之相似 - 在UITextView的鍵盤附件中有一個UISearchBar,甚至在調用[self.searchBar becomeFirstResponder]之后,文本視圖仍然接收到鍵盤輸入。

這是最終幫助的:

[self.searchBar.window makeKeyAndVisible];

顯然,鍵盤附件是與UITextField不同的UIWindow的一部分。

注意:要繼續在文本視圖中鍵入,您應該調用類似[self.textView.window makeKeyAndVisible]; ...

你有沒有嘗試過添加self.mySearchBar.delegate = self;

你應該在你的財產中使用strong

@property (strong, nonatomic) IBOutlet UISearchBar *mySearchBar;

始終為您的財產設置強大的IBOutlet。 當您從navigationController彈出B時,mySearchBar已經釋放,所以你回到B,[self.mySearchBar becomeFirstResponder]不起作用。

暫無
暫無

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

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