首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UITextField in UISearchController BecomeFirstResponder

UITextField in UISearchController BecomeFirstResponder
EN

Stack Overflow用户
提问于 2016-05-19 14:37:08
回答 1查看 383关注 0票数 0

我有一个UITextField,它位于视图控制器显示时需要成为FirstResponder的UISearchController中。

在ViewDidLoad上构建了UISearchController。

在ViewDidAppear上,我从UISearchController得到UITextField并告诉BecomeFirstResponder

代码语言:javascript
复制
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);
    }

UITextField永远不会成为第一个响应者,因为它不能成为第一个响应者。为什么UITextField不能成为第一个修复器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-19 14:44:37

ViewDidLoad是在视图控制器将其视图层次结构加载到内存但未显示给用户之后调用的。在这个阶段,您不能与对象执行UI交互。

UISearchController有一个委托方法,该方法在自动显示时被调用。用它打开键盘。

代码语言:javascript
复制
optional func didPresentSearchController(searchController: UISearchController){
        searchController.searchBar.becomeFirstResponder();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37326524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档