我创建了一个UITextField
,背景图片如下:
_tf = new CustomTextField(new RectangleF(0,0 200, 200));
_tf.BorderStyle = UITextBorderStyle.None;
_tf.Background = UIImage.FromFile("pathToImage");
_tf.Placeholder = "default";
其中CustomTextField
如下:
public class CustomTextField : UITextField
{
public CustomTextField(RectangleF rectF) : base (rectF)
{
}
}
它工作正常,但文本和占位符在左侧看起来太近了。所以,我已经开始覆盖以下方法,但应用程序崩溃了。
public override RectangleF PlaceholderRect (RectangleF forBounds)
{
return RectangleF.Inflate(forBounds, 5, 5);
}
以同样的方式EditingRect
方法和TextRect
。
有什么想法吗?谢谢。
更新
例如,我只覆盖了PlaceholderRect
(将占位符移动到其他位置)但应用程序崩溃了,为什么?
这是日志:
Stacktrace:
at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <0x00004>
at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (int,string[],intptr,intptr) <0x00004>
at MonoTouch.UIKit.UIApplication.Main (string[],string,string) [0x00038] in /Users/****/Source/iphone-3/monotouch/UIKit/UIApplication.cs:26
at MonoTouch.UIKit.UIApplication.Main (string[]) [0x00000] in /Users/****/Source/iphone-3/monotouch/UIKit/UIApplication.cs:31
at CustomControls.Application.Main (string[]) [0x00000] in /Users/****/Projects/CustomControls/CustomControls/Main.cs:14
at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x0001d, 0x00043>
Native stacktrace:
0 CustomControls 0x000be66f mono_handle_native_sigsegv + 343
1 CustomControls 0x0000e43e mono_sigsegv_signal_handler + 313
2 libSystem.B.dylib 0x9992046b _sigtramp + 43
3 ??? 0xffffffff 0x0 + 4294967295
4 CustomControls 0x0027b991 monotouch_x86_double_abi_stret_trampoline + 144
5 UIKit 0x01c7c68c -[UITextField layoutSubviews] + 618
6 QuartzCore 0x03024451 -[CALayer layoutSublayers] + 181
7 QuartzCore 0x0302417c CALayerLayoutIfNeeded + 220
8 QuartzCore 0x0301d37c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310
9 QuartzCore 0x0301d0d0 _ZN2CA11Transaction6commitEv + 292
10 UIKit 0x01be419f -[UIApplication _reportAppLaunchFinished] + 39
11 UIKit 0x01be4659 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 690
12 UIKit 0x01beedb2 -[UIApplication handleEvent:withNewEvent:] + 1533
13 UIKit 0x01be7202 -[UIApplication sendEvent:] + 71
14 UIKit 0x01bec732 _UIApplicationHandleEvent + 7576
15 GraphicsServices 0x03eb7a36 PurpleEventCallback + 1550
16 CoreFoundation 0x00df9064 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
17 CoreFoundation 0x00d596f7 __CFRunLoopDoSource1 + 215
18 CoreFoundation 0x00d56983 __CFRunLoopRun + 979
19 CoreFoundation 0x00d56240 CFRunLoopRunSpecific + 208
20 CoreFoundation 0x00d56161 CFRunLoopRunInMode + 97
21 UIKit 0x01be3fa8 -[UIApplication _run] + 636
22 UIKit 0x01bf042e UIApplicationMain + 1160
23 ??? 0x09f31c41 0x0 + 166927425
24 ??? 0x09f31b7a 0x0 + 166927226
25 ??? 0x09f3157d 0x0 + 166925693
26 ??? 0x09f314b9 0x0 + 166925497
27 ??? 0x09f31514 0x0 + 166925588
28 CustomControls 0x0000e202 mono_jit_runtime_invoke + 1360
29 CustomControls 0x001c92af mono_runtime_invoke + 137
30 CustomControls 0x001caf6b mono_runtime_exec_main + 714
31 CustomControls 0x001ca891 mono_runtime_run_main + 812
32 CustomControls 0x00094fe8 mono_jit_exec + 200
33 CustomControls 0x0027cf05 main + 3494
34 CustomControls 0x00002ca1 _start + 208
35 CustomControls 0x00002bd0 start + 40
您还需要其他信息吗?我的目标与此链接(stack overflow reference)相同,但在 Monotouch 中。
提前谢谢,问候。
答案 0 :(得分:1)
看起来MonoTouch正在阻塞bounds参数。你可以通过提供你自己的底层选择器映射并用控件的边界替换base调用的bounds参数来解决这个问题。在典型的使用案例中,我没有注意到任何影响,但您的里程可能会有所不同......
[MonoTouch.Foundation.Export("editingRectForBounds:")]
public RectangleF MyEditingRect()
{
if (iWantToOverrideTheDefaultRect)
{
return mySpecialRect;
}
return base.EditingRect(this.Bounds);
}
答案 1 :(得分:1)
这是一个只影响模拟器的MonoTouch错误[1](它是一个x86 ABI错误),即代码在设备上执行时将按预期工作。