2

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

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

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

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

我正在使用 Xamarin Studio 版本。4.0

4

3 回答 3

3

这很老套——Objective -C 代码之所以有效,是因为当前的实现UIAppearance使用了代理对象。IOW Apple 没有承诺保持实现相同,并且没有记录该特定功能。

既然您已经意识到了这一点,并且如果您仍想将它与 Xamarin.iOS 一起使用,那么您可以使用我在此Q&A中描述的 hack 来完成它。这将允许您在代理上使用任何UIButtonAPI 。UIAppearance

于 2013-02-28T13:22:20.030 回答
2

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

    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);
    }
于 2013-02-28T13:15:35.970 回答
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;
        }
于 2015-01-11T04:04:45.620 回答