2013-02-28 88 views
2

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

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版本。 4.0

+0

这是http://stackoverflow.com/questions/15130180/change-text-of-cancel-button-on-的副本一个-的UISearchBar-使用-MonoTouch的 – 2013-03-01 08:16:38

回答

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); 
    } 
2

这是的hackish - Objective-C的代码工作,因为当前实施UIAppearance使用代理对象。 IOW苹果公司并未承诺保持实施相同,并且没有记录具体功能。

现在你已经意识到了这一点,如果你仍然想用Xamarin.iOS来使用它,那么你可以使用我在这个Q&A中描述的黑客来做到这一点。这将允许您在UIAppearance代理上使用任何UIButton API。

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; 
     } 
相关问题