คำถามติดแท็ก uiviewcontroller

คลาส UIViewController จะจัดการมุมมองในแอพ iOS และเป็นสื่อกลางในการโต้ตอบระหว่างมุมมองของแอพอ็อบเจ็กต์โมเดลพื้นฐานและเวิร์กโฟลว์โดยรวม

4
UIViewController viewDidLoad เทียบกับ viewWillAppear: การแบ่งงานที่เหมาะสมคืออะไร?
ฉันมีความไม่ชัดเจนอยู่เสมอเกี่ยวกับประเภทของงานที่ควรกำหนดให้viewDidLoadกับ vs. viewWillAppear: ในUIViewControllerคลาสย่อย เช่นฉันกำลังทำแอพที่ฉันมีUIViewControllersubclass กดปุ่มเซิร์ฟเวอร์รับข้อมูลป้อนไปยังมุมมองแล้วแสดงมุมมองนั้น อะไรคือข้อดีข้อเสียของการทำเช่นนี้viewDidLoadกับviewWillAppear?

6
ข้อผิดพลาดร้ายแรง: การใช้ initializer ที่ยังไม่ได้ใช้ 'init (coder :)' สำหรับคลาส
ฉันตัดสินใจดำเนินการโปรเจ็กต์ที่เหลือต่อด้วย Swift เมื่อฉันเพิ่มคลาสที่กำหนดเอง (subclass ของUIViewcontroller) ไปยังตัวควบคุมมุมมองสตอรี่บอร์ดของฉันและโหลดโปรเจ็กต์แอพก็ขัดข้องทันทีโดยมีข้อผิดพลาดดังต่อไปนี้: ข้อผิดพลาดร้ายแรง: การใช้ initializer ที่ยังไม่ได้ใช้ 'init (coder :)' สำหรับคลาส นี่คือรหัส: import UIKit class TestViewController: UIViewController { init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initialization } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. …

16
แสดง clearColor UIViewController ผ่านทาง UIViewController
ฉันมีUIViewControllerมุมมองเป็น subview / modal ด้านบนของUIViewControllerมุมมองอื่นเช่นว่า subview / modal ควรมีความโปร่งใสและส่วนประกอบอะไรก็ตามที่ถูกเพิ่มเข้าไปใน subview นั้นควรมองเห็นได้ ปัญหาคือฉันมี subview แสดงพื้นหลังสีดำแทนที่จะมี clearColor ฉันพยายามที่จะทำให้UIViewเป็นสีที่ชัดเจนไม่ใช่พื้นหลังสีดำ มีใครรู้บ้างว่ามันมีอะไรผิดปกติหรือไม่? ข้อเสนอแนะใด ๆ ชื่นชม FirstViewController.m UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"]; [vc setModalPresentationStyle:UIModalPresentationFullScreen]; [self presentModalViewController:vc animated:NO]; SecondViewController.m - (void)viewDidLoad { [super viewDidLoad]; self.view.opaque = YES; self.view.backgroundColor = [UIColor clearColor]; …

6
การเปลี่ยนแปลงภาพเคลื่อนไหวของตัวควบคุมมุมมองโดยไม่ต้องใช้ตัวควบคุมทิศทางกองซ้อนตัวควบคุมย่อยหรือตัวควบคุม modal?
NavigationControllers มีกอง ViewController ในการจัดการและการเปลี่ยนภาพเคลื่อนไหว จำกัด การเพิ่มตัวควบคุมมุมมองเป็นมุมมองย่อยไปยังตัวควบคุมมุมมองที่มีอยู่ต้องผ่านเหตุการณ์ไปยังตัวควบคุมมุมมองย่อยซึ่งเป็นความเจ็บปวดในการจัดการเต็มไปด้วยความรำคาญเล็กน้อยและโดยทั่วไปรู้สึกเหมือนแฮ็คที่ไม่ดีเมื่อใช้งาน ทำสิ่งนี้) การนำเสนอตัวควบคุมมุมมอง modal อีกครั้งวางตัวควบคุมมุมมองด้านบนของอีกและในขณะที่มันไม่มีปัญหาผ่านเหตุการณ์ที่อธิบายไว้ข้างต้นมันไม่ 'สลับ' ตัวควบคุมมุมมองจริง ๆ มันซ้อนกัน สตอรีบอร์ดนั้น จำกัด อยู่ที่ iOS 5 และเกือบจะสมบูรณ์แบบ แต่ไม่สามารถใช้ได้ในทุกโครงการ ใครบางคนสามารถนำเสนอตัวอย่างรหัส SOLID ในวิธีการเปลี่ยนมุมมองตัวควบคุมโดยไม่มีข้อ จำกัด ข้างต้นและช่วยให้การเปลี่ยนภาพเคลื่อนไหวระหว่างพวกเขา? ตัวอย่างปิด แต่ไม่มีภาพเคลื่อนไหว: วิธีการใช้ตัวควบคุมมุมมองกำหนดเอง iOS หลายตัวโดยไม่มีตัวควบคุมการนำทาง แก้ไข: การใช้ Nav Controller นั้นใช้ได้ แต่ต้องมีรูปแบบการเปลี่ยนภาพเคลื่อนไหว (ไม่ใช่แค่เอฟเฟ็กต์ภาพนิ่ง) ตัวควบคุมมุมมองที่แสดงจะต้องถูกเปลี่ยนอย่างสมบูรณ์ (ไม่ซ้อนกัน) ถ้าตัวควบคุมมุมมองที่สองต้องเอาตัวควบคุมมุมมองอื่นออกจากสแต็กแสดงว่าตัวควบคุมนั้นดูไม่เพียงพอ แก้ไข 2: iOS 4 ควรเป็นระบบปฏิบัติการพื้นฐานสำหรับคำถามนี้ฉันควรชี้แจงว่าเมื่อกล่าวถึงกระดานเรื่องราว (ด้านบน)


5
ปิดใช้งานการปิดการโต้ตอบของตัวควบคุมมุมมองที่นำเสนอใน iOS 13
iOS 13นำเสนอการออกแบบใหม่ของmodalPresentationStyle .pageSheet(และรุ่นพี่น้อง.formSheet) สำหรับตัวควบคุมมุมมองที่นำเสนอแบบโมเดิร์น ... ... และเราสามารถยกเลิกแผ่นเหล่านี้โดยการเลื่อนตัวควบคุมมุมมองนำเสนอลง(การเลิกจ้างโต้ตอบ) แม้ว่าคุณลักษณะ "ดึงเพื่อปิด" ใหม่จะมีประโยชน์ แต่ก็อาจไม่เป็นที่ต้องการเสมอไป คำถาม:เราจะปิดการเลิกจ้างแบบโต้ตอบได้อย่างไร - โปรดทราบว่าเราคงรูปแบบการนำเสนอไว้เหมือนเดิม

13
viewWillDisappear: ตรวจสอบว่าตัวควบคุมมุมมองกำลังถูกเปิดหรือกำลังแสดงตัวควบคุมมุมมองย่อย
ฉันกำลังดิ้นรนเพื่อหาทางออกที่ดีสำหรับปัญหานี้ ใน-viewWillDisappear:วิธีของตัวควบคุมมุมมองฉันต้องหาวิธีตรวจสอบว่าเป็นเพราะตัวควบคุมมุมมองถูกผลักลงบนสแต็กของตัวควบคุมการนำทางหรือไม่หรือเป็นเพราะตัวควบคุมมุมมองหายไปเนื่องจากถูกดึงออก ในขณะนี้ฉันกำลังตั้งค่าสถานะเช่นisShowingChildViewControllerแต่มันค่อนข้างซับซ้อน วิธีเดียวที่ฉันคิดว่าฉันสามารถตรวจจับได้คือ-deallocวิธีการ

19
รับ UIViewController ที่แสดงปัจจุบันบนหน้าจอใน AppDelegate.m
กระแสUIViewControllerบนหน้าจอจำเป็นต้องตอบสนองต่อการแจ้งเตือนแบบพุชจาก APN โดยการตั้งค่ามุมมองป้ายบางส่วน แต่ฉันจะหาUIViewControllerวิธีการapplication:didReceiveRemoteNotification: จากAppDelegate.m? ฉันพยายามใช้self.window.rootViewControllerเพื่อรับการแสดงผลปัจจุบันUIViewControllerอาจเป็นUINavigationViewControllerตัวควบคุมมุมมองหรือประเภทอื่น ๆ และฉันพบว่าvisibleViewControllerคุณสมบัติของUINavigationViewControllerสามารถใช้เพื่อรับUIViewControllerบนหน้าจอ แต่จะทำอย่างไรถ้าไม่ใช่UINavigationViewController? ขอความช่วยเหลือใด ๆ ! รหัสที่เกี่ยวข้องมีดังต่อไปนี้ AppDelegate.m ... - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { //I would like to find out which view controller is on the screen here. UIViewController *vc = [(UINavigationViewController *)self.window.rootViewController visibleViewController]; [vc performSelector:@selector(handleThePushNotification:) withObject:userInfo]; } ... ViewControllerA.m - (void)handleThePushNotification:(NSDictionary *)userInfo{ …

16
จะตรวจสอบได้อย่างไรว่าตัวควบคุมมุมมองถูกนำเสนอแบบโมฆะหรือถูกผลักบนสแต็กการนำทาง?
ฉันจะแยกความแตกต่างระหว่าง: นำเสนออย่างสุภาพ ผลักบนสแตกการนำทาง ทั้งสองอย่างpresentingViewControllerและisMovingToParentViewControllerอยู่YESในทั้งสองกรณีจึงไม่เป็นประโยชน์มากนัก สิ่งที่ทำให้เกิดความซับซ้อนคือบางครั้งตัวควบคุมมุมมองหลักของฉันเป็นกิริยาช่วยซึ่งตัวควบคุมมุมมองที่ต้องตรวจสอบจะถูกผลัก ปรากฎว่าปัญหาของฉันคือฉันฝังลงHtmlViewControllerในสิ่งUINavigationControllerที่จะนำเสนอแล้ว นั่นเป็นเหตุผลที่ความพยายามของฉันเองและคำตอบที่ดีด้านล่างไม่ได้ผล HtmlViewController* termsViewController = [[HtmlViewController alloc] initWithDictionary:dictionary]; UINavigationController* modalViewController; modalViewController = [[UINavigationController alloc] initWithRootViewController:termsViewController]; modalViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentViewController:modalViewController animated:YES completion:nil]; ฉันเดาว่าฉันควรบอกตัวควบคุมมุมมองของฉันดีกว่าเมื่อมันเป็นกิริยาแทนที่จะพยายามกำหนด

21
ฉันจะปิดใช้งานท่าทางการปัดของ UIPageViewController ได้อย่างไร
ในกรณีหลักของฉันUIViewControllerมีUIPageViewControllerซึ่งประกอบด้วยUINavigationControllerซึ่งประกอบด้วยUIViewController. ฉันต้องการเพิ่มท่าทางการปัดไปยังตัวควบคุมมุมมองสุดท้าย แต่การปัดจะถูกจัดการราวกับว่ามันเป็นของตัวควบคุมการดูหน้า ฉันพยายามทำสิ่งนี้ทั้งโดยทางโปรแกรมและผ่าน xib แต่ไม่มีผลลัพธ์ อย่างที่ฉันเข้าใจฉันไม่สามารถบรรลุเป้าหมายได้จนกว่าจะUIPageViewControllerจัดการกับท่าทางของมัน วิธีแก้ปัญหานี้?

4
Storyboard - อ้างถึง ViewController ใน AppDelegate
ลองพิจารณาสถานการณ์ต่อไปนี้: ฉันมีแอปที่ใช้สตอรี่บอร์ด ฉันเพิ่มออบเจ็กต์ ViewController ลงในสตอรี่บอร์ดเพิ่มไฟล์คลาสสำหรับ ViewController นี้ลงในโปรเจ็กต์และระบุชื่อของคลาสใหม่ในตัวตรวจสอบข้อมูลประจำตัว IB ตอนนี้ฉันจะอ้างถึง ViewController นี้โดยทางโปรแกรมจาก AppDelegate ได้อย่างไร ฉันได้สร้างตัวแปรกับคลาสที่เกี่ยวข้องและเปลี่ยนเป็นคุณสมบัติ IBOutlet แต่ฉันไม่เห็นวิธีใดที่จะสามารถอ้างถึง ViewController ใหม่ในโค้ดได้ - ความพยายามใด ๆ ที่จะ ctrl ลากการเชื่อมต่อไม่ได้ผล . เช่นภายใน AppDelegate ฉันสามารถไปที่ ViewController พื้นฐานได้เช่นนี้ (MyViewController*) self.window.rootViewController แต่ ViewController อื่น ๆ ที่อยู่ในสตอรี่บอร์ดล่ะ?

12
แผ่นการตรวจจับถูกปิดบน iOS 13
ก่อน iOS 13 มีการนำเสนอตัวควบคุมมุมมองที่ใช้เพื่อครอบคลุมทั้งหน้าจอ และเมื่อปิดviewDidAppearฟังก์ชันพาเรนต์วิวคอนโทรลเลอร์จะถูกเรียกใช้งาน ตอนนี้ iOS 13 จะนำเสนอตัวควบคุมมุมมองเป็นแผ่นงานเป็นค่าเริ่มต้นซึ่งหมายความว่าการ์ดจะครอบคลุมตัวควบคุมมุมมองที่อยู่เบื้องหลังบางส่วนซึ่งหมายความว่าviewDidAppearจะไม่มีการเรียกใช้เนื่องจากตัวควบคุมมุมมองหลักไม่เคยหายไป มีวิธีตรวจสอบว่าแผ่นตัวควบคุมมุมมองที่นำเสนอถูกปิดหรือไม่ ฟังก์ชั่นอื่น ๆ ที่ฉันสามารถแทนที่ในตัวควบคุมมุมมองหลักแทนที่จะใช้ผู้รับมอบสิทธิ์บางประเภท ?

14
วิธีใช้ uiviewcontroller สตอรี่บอร์ดเดียวสำหรับคลาสย่อยหลาย ๆ
สมมติว่าฉันมีสตอรีบอร์ดที่มีUINavigationControllerเป็นตัวควบคุมมุมมองเริ่มต้น ควบคุมดูรากของมันคือ subclass ของซึ่งเป็นUITableViewController BasicViewControllerมีIBActionซึ่งเชื่อมต่อกับปุ่มนำทางด้านขวาของแถบนำทาง จากนั้นฉันต้องการใช้สตอรีบอร์ดเป็นเทมเพลตสำหรับมุมมองอื่น ๆ โดยไม่ต้องสร้างสตอรีบอร์ดเพิ่มเติม บอกว่ามุมมองเหล่านี้จะมีว่าอินเตอร์เฟซเดียวกัน แต่มีการควบคุมดูรากของการเรียนSpecificViewController1และซึ่งเป็นคลาสย่อยSpecificViewController2 ตัวควบคุมมุมมอง 2 ตัวนั้นจะมีฟังก์ชันและอินเทอร์เฟซเหมือนกันยกเว้นวิธี มันจะเป็นดังต่อไปนี้:BasicViewControllerIBAction @interface BasicViewController : UITableViewController @interface SpecificViewController1 : BasicViewController @interface SpecificViewController2 : BasicViewController ฉันจะทำอะไรแบบนั้นได้ไหม? ฉันสามารถเพียงอินสแตนซ์สตอรี่บอร์ดของBasicViewControllerแต่ต้องควบคุมดูราก subclass SpecificViewController1และSpecificViewController2? ขอบคุณ

13
การปิดตัวควบคุมมุมมองที่นำเสนอ
ฉันมีคำถามตามทฤษฎี ตอนนี้ฉันกำลังอ่านคู่มือViewControllerของ Apple พวกเขาเขียน: เมื่อถึงเวลาที่ต้องปิดตัวควบคุมมุมมองที่นำเสนอแนวทางที่ต้องการคือให้ตัวควบคุมมุมมองที่นำเสนอปิดมัน กล่าวอีกนัยหนึ่งเมื่อใดก็ตามที่เป็นไปได้ตัวควบคุมมุมมองเดียวกับที่นำเสนอตัวควบคุมมุมมองควรรับผิดชอบในการปิดมันด้วย แม้ว่าจะมีเทคนิคหลายประการในการแจ้งตัวควบคุมมุมมองการนำเสนอว่าควรปิดตัวควบคุมมุมมองที่นำเสนอ แต่เทคนิคที่ต้องการคือการมอบหมาย แต่ฉันไม่สามารถอธิบายได้ว่าทำไมฉันต้องสร้างโปรโตคอลใน VC ที่นำเสนอและเพิ่มตัวแทนที่เปลี่ยนแปลงได้สร้างวิธีการมอบสิทธิ์ในการนำเสนอ VC เพื่อปิด VC ที่นำเสนอแทนที่จะเรียกแบบธรรมดาในวิธีการควบคุมมุมมองที่นำเสนอ [self dismissViewControllerAnimated:NO completion:nil]เหรอ? ทำไมตัวเลือกแรกจึงดีกว่า? ทำไม Apple ถึงแนะนำ

18
บล็อกเสร็จสิ้นสำหรับ popViewController
เมื่อยกเลิกการใช้ตัวควบคุมมุมมองแบบโมดอลdismissViewControllerจะมีตัวเลือกในการจัดเตรียมบล็อกที่สมบูรณ์ มีค่าเทียบเท่าสำหรับpopViewController? อาร์กิวเมนต์เสร็จสมบูรณ์ค่อนข้างมีประโยชน์ ตัวอย่างเช่นฉันสามารถใช้เพื่อระงับการลบแถวออกจากมุมมองตารางจนกว่าโมดอลจะปิดหน้าจอเพื่อให้ผู้ใช้เห็นภาพเคลื่อนไหวของแถว เมื่อกลับจากตัวควบคุมมุมมองแบบพุชฉันต้องการโอกาสเดียวกันนี้ ฉันได้ลองวางpopViewControllerในUIViewบล็อกแอนิเมชั่นซึ่งฉันสามารถเข้าถึงบล็อกที่สมบูรณ์ได้ อย่างไรก็ตามสิ่งนี้ก่อให้เกิดผลข้างเคียงบางอย่างที่ไม่ต้องการกับมุมมองที่ถูกดึงไป หากไม่มีวิธีการดังกล่าวมีวิธีแก้ปัญหาอย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.