2016-05-19 4 views
0

私は、View Controllerが表示されているときにFirstResponderになる必要があるUISearchControllerにあるUITextFieldを持っています。UITextField in UISearchController BecomeFirstResponder

ViewDidLoadでは、UISearchControllerが構築されます。私はUISearchControllerからのUITextFieldを取得し、BecomeFirstResponder

public override void ViewDidLoad(bool animated) 
    { 
     base.ViewDidLoad(); 
     BuildSearchController(); 

     SearchController.SearchBar.BecomeFirstResponder(); 
    } 

private void BuildSearchController() 
    { 
     UIFont MyFont = UIFont.FromName("Helvetica", 20f); 

     SearchController = new UISearchController(ResultsTableController) 
     { 
      WeakDelegate = this, 
      DimsBackgroundDuringPresentation = false, 
      WeakSearchResultsUpdater = this, 
     }; 

     SearchController.SearchBar.ScopeButtonTitles = new string[5] { "Account", "Name", "Service Address", "Phone", "SSN" }; 
     UITextField SearchField = (UITextField)SearchController.SearchBar.Subviews[0].Subviews[2]; 

     SearchField.Font = MyFont; 
     SearchController.SearchBar.ShowsCancelButton = false; 
     SearchController.SearchBar.SetScopeBarButtonTitle(new UITextAttributes() { Font = MyFont }, UIControlState.Normal); 
     SearchController.SearchBar.SizeToFit(); 
     SearchController.SearchBar.SelectedScopeButtonIndex = 1; 
     SearchController.SearchBar.SetShowsCancelButton(false, false); 

     UISegmentedControl TempSegControl = SearchController.SearchBar.Subviews[0].Subviews[0].Subviews[1] as UISegmentedControl; 
     TempSegControl.BackgroundColor = UIColor.FromRGBA(0, 122, 255, 255); 
     TempSegControl.TintColor = UIColor.White; 
     TempSegControl.Layer.BorderWidth = 1; 
     TempSegControl.Layer.CornerRadius = 6; 
     TempSegControl.Layer.BorderColor = UIColor.White.CGColor; 
     SearchController.SearchBar.BarTintColor = UIColor.FromRGBA(232, 232, 232, 255); 


     SearchController.HidesNavigationBarDuringPresentation = false; 

     SearchField.BecomeFirstResponder(); 
     TableView.TableHeaderView = SearchController.SearchBar; 

     SearchController.SearchBar.WeakDelegate = this; 
    } 

public override void ViewDidAppear(bool animated) 
    { 
     UITextField SearchBox = SearchController.SearchBar.Subviews[0].Subviews[2] as UITextField; 

     if (SearchBox.CanBecomeFirstResponder) 
     { 
      SearchBox.BecomeFirstResponder(); 
     } 
     base.ViewWillAppear(animated); 
    } 

それを伝えるViewDidAppearで

ファーストレスポンダになることができないので、UITextFieldには、ファーストレスポンダになることはありません。なぜ、UITextFieldが最初の再認証者にならないのですか?

答えて

0

ViewDidLoadは、ビューコントローラがビュー階層をメモリにロードした後に呼び出されますが、ユーザには提示されません。 そのステージのオブジェクトとのUI対話は実行できません。

UISearchControllerには、自動的に提示されたときに呼び出されるデリゲートメソッドがあります。これを使用してキーボードを起動します。

optional func didPresentSearchController(searchController: UISearchController){ 
     searchController.searchBar.becomeFirstResponder(); 
    } 
+0

私はその呼び出しをViewDidAppearメソッドに移動しました。 UISearchControllerのUITextFieldにはまだフォーカスがありません。コントローラが表示されたら、ユーザはUITextFieldの中で触れることなく入力を開始できるようにしてほしい –

+0

ありがとうございました。ここにはC#のバージョンがあります。 [Export( "didPresentSearchController:")] パブリック仮想void DidPresentSearchController(UISearchController searchController) { SearchController.SearchBar.Subviews [0] .Subviews [2] .BecomeFirstResponder(); } –

関連する問題