【问题标题】:Cannot change the title of the cancel button in the UISearchBar无法更改 UISearchBar 中取消按钮的标题
【发布时间】:2013-02-28 09:40:31
【问题描述】:
我想使用 MonoTouch 更改 UISearchBar 的取消按钮的标题。
是的,我看过这个“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
【问题讨论】:
标签:
ios
uibutton
uiappearance
xamarin.ios
【解决方案1】:
这是 hackish - Objective-C 代码之所以有效,是因为 UIAppearance 的 current 实现使用了代理对象。 IOW Apple 没有承诺保持实现相同,并且没有记录该特定功能。
既然您已经意识到这一点,并且如果您仍想将它与 Xamarin.iOS 一起使用,那么您可以使用我在此 Q&A 中描述的 hack 来完成它。这将允许您在 UIAppearance 代理上使用任何 UIButton API。
【解决方案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);
}
【解决方案3】:
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;
}