Creating custom UITextField methods and overrides using MonoTouch

I created a UITextField with a background image as follows:

 _tf = new CustomTextField(new RectangleF(0,0 200, 200)); _tf.BorderStyle = UITextBorderStyle.None; _tf.Background = UIImage.FromFile("pathToImage"); _tf.Placeholder = "default"; 

where CustomTextField following:

 public class CustomTextField : UITextField { public CustomTextField(RectangleF rectF) : base (rectF) { } } 

It works fine, but both the text and the placeholder look too close to the left. So, I started overriding the following methods, but the application will work.

 public override RectangleF PlaceholderRect (RectangleF forBounds) { return RectangleF.Inflate(forBounds, 5, 5); } 

In the same way, both the EditingRect method and the EditingRect method.

Any ideas? Thanks.

UPDATE

For example, I only redefined PlaceholderRect (to move the placeholder to another position), but the application will work, why?

This is the log:

 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 

Do you need any other information? My goal is the same as this link ( stack overflow link ), but in Monotouch .

Thank you in advance.

+4
source share
2 answers

This is a MonoTouch error [1], which affects only the simulator (this is an x86 ABI error), that is, the code will work as expected when executed on devices.

[1] http://bugzilla.xamarin.com/show_bug.cgi?id=265

+1
source

It looks like MonoTouch is choking on the bounds parameter. You can hack this by giving you your own mapping to the base selector and replace the bounds parameter for the base calls with control boundaries. In typical use cases, I did not notice any effect, but your mileage may vary ...

 [MonoTouch.Foundation.Export("editingRectForBounds:")] public RectangleF MyEditingRect() { if (iWantToOverrideTheDefaultRect) { return mySpecialRect; } return base.EditingRect(this.Bounds); } 
+1
source

Source: https://habr.com/ru/post/1343653/


All Articles