سؤال

لديّ تطبيق بيانات أساسي يستخدم وحدة تحكم التنقل للتنقل إلى طريقة عرض تفصيلية ، ثم إذا قمت بتحرير أحد صفوف البيانات في طريقة عرض التفاصيل التي يتم نقلها إلى عرض تحرير لهذا السطر المفرد ، كما هو الحال في 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: الرسوم المتحركة:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top