无法更改UISearchBar中取消按钮的标题

时间:2013-02-28 09:40:31

标签: ios uibutton uiappearance xamarin.ios

我想使用MonoTouch更改UISearchBar的取消按钮的标题。 是的,我看过这个“hack”,但我更喜欢更优雅的方式。我正在尝试使用:

UIButton.AppearanceWhenContainedIn(typeof(UISearchBar)).SetTitle("xxxx");

它应该在objective-c中工作但在MonoTouch中我得到以下错误

  

消息:错误CS1061:输入   可以找到MonoTouch.UIKit.UIButton.UIButtonAppearance' does not contain a definition for SetTitle'并且找不到扩展方法SetTitle' of type MonoTouch.UIKit.UIButton.UIButtonAppearance'(是吗?   缺少using指令或程序集引用?)

我正在使用Xamarin Studio ver。 4.0

3 个答案:

答案 0 :(得分:2)

为什么不使用更轻量级的黑客?

    public static void SetSearchBarCancelButtonTitle (UISearchBar sb, string title)
    {
        foreach (var subview in sb.Subviews)
            if (subview is UIButton)
                (subview as UIButton).SetTitle (title, UIControlState.Normal);
    }

答案 1 :(得分:2)

hackish - Objective-C代码有效,因为UIAppearance当前实现使用代理对象。如果Apple没有承诺保持实现相同,并且没有记录特定功能。

既然您已经意识到这一点,并且您仍然希望将它与Xamarin.iOS一起使用,那么您可以使用我在此Q&A中描述的黑客来实现它。这样您就可以在UIButton代理上使用任何UIAppearance API。

答案 2 :(得分:0)

UIButton似乎不再是UISearchBar的直接子视图。你必须像下面那样递归,直到找到它为止:

        public static bool SetButton(UIView parentView, string title, UIColor tint)
        {
            foreach (var sub in parentView.Subviews)
            {
                if (sub is UIButton)
                {
                    (sub as UIButton).SetTitle(title, UIControlState.Normal);
                    (sub as UIButton).SetTitleColor(tint, UIControlState.Normal);
                    return true;
                }

                if (SetButton(sub, title, tint))
                    return true;
            }

            return false;
        }