Создайте пользовательские методы Uitextfield и переопределение с помощью монотоуш

StackOverflow https://stackoverflow.com/questions/5301675

Вопрос

Я создал 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   

Вам нужна другая информация? Моя цель такая же, как эта ссылка (Ссылка на переполнение стека) но в Монотуш.

Заранее спасибо, с уважением.

Это было полезно?

Решение

Это ошибка монотоуш [1], которая влияет только на симулятор (это ошибка x86 ABI), то есть код будет работать, как и ожидалось, когда выполняется на устройствах.

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

Другие советы

Похоже, что Monotouch задыхается от параметра границ. Вы можете взломать это, предоставив вам собственное сопоставление с базовым селектором и заменить параметр Bounds для базовых вызовов на границы управления. В типичных случаях использования я не заметил никакого влияния, но ваш пробег может различаться ...

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

    return base.EditingRect(this.Bounds);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top