我想使用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
答案 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;
}