UITEXTField Subview of UitableViewCell لتصبح المستجيبين الأول؟
-
27-09-2019 - |
سؤال
لديّ تطبيق بيانات أساسي يستخدم وحدة تحكم التنقل للتنقل إلى طريقة عرض تفصيلية ، ثم إذا قمت بتحرير أحد صفوف البيانات في طريقة عرض التفاصيل التي يتم نقلها إلى عرض تحرير لهذا السطر المفرد ، كما هو الحال في Apples Coredatabooks مثال (باستثناء coredatabooks يستخدم فقط أ UITextField
من تلقاء نفسها ، ليست نظرة فرعية UITableViewCell
مثل لي)!
عرض التحرير هو أ UITableviewController
الذي ينشئ جدوله بصف واحد صف واحد و UITextfield
في الخلية ، برمجيا.
ما أريد أن يحدث هو عندما تحدد صفًا لتحريره ويتم دفع عرض التحرير على مكدس NAV ويتم تحريك عرض التحرير عبر الشاشة ، أريد اختيار Textfiel مع انتقال العرض عبر الشاشة لاتخاذ الموضع. كما هو الحال في تطبيق جهات الاتصال أو في تطبيق Coredatabooks.
لدي حاليًا الرمز التالي في تطبيقي الذي يتسبب في تحميل العرض ، ثم ترى لوحة المفاتيح تظهر (وهذا ليس ما أريد ، أريد أن تكون لوحة المفاتيح موجودة بالفعل)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[theTextField becomeFirstResponder];
}
لا يمكنك وضع هذا في -viewWillAppear
نظرًا لأن Textfield لم يتم إنشاؤه بعد theTextField
لا شيء. في تطبيق CoredataBooks حيث يحققون ما أريد أن يقوموا بتحميل عرضهم من بنك الاستثمار القومي حتى يستخدموا نفس الرمز ولكن في -viewWillAppear
كما تم إنشاء Textfield بالفعل!
هل هناك على أي حال الالتفاف على هذا دون إنشاء بنك الاستثمار القومي ، أريد الحفاظ على برنامج التنفيذ لتمكين المزيد من المرونة.
شكرا جزيلا
المحلول
بعد التحدث مع فريق دعم Apple Dev ، لدي إجابة!
ما عليك فعله هو إنشاء شاشة خارج الشاشة UITextField
في -(void)loadView;
ثم قم بتعيينه كأول مستجيب ثم على viewDidLoad
الطريقة يمكنك تعيين ملف UITextField
في ال UITableViewCell
ليكون المستجيب الأول. Heres بعض رمز المثال (تذكر أنني أفعل هذا في UITableViewController
لذلك أقوم بإنشاء TableView أيضًا!
- (void)loadView
{
[super loadView];
//Set the view up.
UIView *theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = theView;
[theView release];
//Create an negatively sized or offscreen textfield
UITextField *hiddenField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, -10, -10)];
hiddenTextField = hiddenField;
[self.view addSubview:hiddenTextField];
[hiddenField release];
//Create the tableview
UITableView *theTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStyleGrouped];
theTableView.delegate = self;
theTableView.dataSource = self;
[self.view addSubview:theTableView];
[theTableView release];
//Set the hiddenTextField to become first responder
[hiddenTextField becomeFirstResponder];
//Background for a grouped tableview
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//Now the the UITableViewCells UITextField has loaded you can set that as first responder
[theTextField becomeFirstResponder];
}
آمل أن يساعد هذا أي شخص عالق في نفس الموقف مثلي!
إذا كان بإمكان أي شخص آخر رؤية طريقة أفضل للقيام بذلك ، فيرجى القول.
نصائح أخرى
حاول القيام بذلك في طريقة ViewDidAppear ، يعمل بالنسبة لي.
أعتقد أن الحل الواضح هو إنشاء حقل النص في init
طريقة وحدة التحكم في العرض. عادةً ما يكون ذلك المكان الذي تقوم فيه بتكوين العرض لأن وحدة التحكم في العرض تتطلب خاصية View المأهولة بالسكان.
ثم يمكنك تعيين Textfield كأول مستجيب في viewWillAppear
وينبغي أن تكون لوحة المفاتيح مرئية مع شرائح العرض.
هل حاولت استخدام أساليب تفويض UinavigationController؟:
NavigationController: WillShowViewController: الرسوم المتحركة: