Question

I've created a UITextField with a background image like this:

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

where CustomTextField is the following:

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

It works ok, but both text and placeholder appear to be too close on the left. So, I've started to override the following methods, but the app crashes.

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

and at the same manner both EditingRect method and TextRect.

Any ideas? Thank you.

UPDATE

For example, I've overridden only the PlaceholderRect (to move the placeholder in a different position) but the app crashes, 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 reference) but in Monotouch.

Thank you in advance, regards.

Was it helpful?

Solution

This is a MonoTouch bug [1] that only affects the simulator (it's an x86 ABI bug), i.e. the code will work as expected when executed on the devices.

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

OTHER TIPS

Looks like MonoTouch is choking on the bounds parameter. You can hack around this by providing you own mapping to the underlying selector and replace the bounds parameter for base calls with the control's bounds. In typical use cases, I haven't noted any impact, but your mileage may vary...

[MonoTouch.Foundation.Export("editingRectForBounds:")]
public RectangleF MyEditingRect()
{
    if (iWantToOverrideTheDefaultRect)
    {
        return mySpecialRect;
    }

    return base.EditingRect(this.Bounds);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top