ตัวอย่างตัวควบคุมมุมมองคอนเทนเนอร์ [ปิด]


95

ใครช่วยชี้ตัวอย่างดีๆในการสร้าง Custom View Controller เป็น Container View Controller ได้บ้าง เอกสารเดียวที่ฉันสามารถพบคือคู่ของย่อหน้าที่UIViewController ชั้นอ้างอิง ฉันรู้สึกว่าฉันต้องการข้อมูลมากกว่านั้นเล็กน้อยและตัวอย่างการนำไปใช้ก็จะดี Google ไม่ได้ทำอะไรเลย

ฉันสนใจวิธีนี้เป็นพิเศษ:

transitionFromViewController:toViewController:duration:options:animations:completion:

คุณพบแหล่งข้อมูลอื่นนอกเหนือจากไฮเปอร์คริปต์ที่กล่าวถึงหรือไม่
John Estropia

1
ยัง. วันนี้ผมจะไปขุดอีกรอบถ้ามีเวลา มันดูแปลกที่จะมีข้อมูลเพียงเล็กน้อยเกี่ยวกับเรื่องนี้ว่ามันมีความสำคัญและมีประโยชน์เพียงใด ฉันสงสัยว่ามันมีปัญหาหรือไม่และจะมีการบันทึกไว้ดีกว่าเมื่อปรับปรุงแล้ว
เลิกหักเห

3
สิ่งนี้ทำให้ฉันสับสนอย่างมาก ตัวอย่างเช่นมุมมองสามารถมีคอนโทรลเลอร์แบบฝังได้เพียงตัวเดียว แล้วถ้าคุณต้องการเปลี่ยนคอนโทรลเลอร์ในมุมมองคอนเทนเนอร์นั้นล่ะ?
user4951

@JanakNirmal ภาระหน้าที่มาก.
Undistraction

ฉันสามารถซ่อนมุมมองคอนเทนเนอร์ได้
ไหม

คำตอบ:


52

สิ่งที่ดีที่สุดที่ฉันได้พบเพื่อให้ห่างไกลเป็น WWDC 2011 เซสชันวิดีโอเซสชัน 102 - การนำ UIViewController บรรจุ


1
Ditto. นี่ไม่ใช่ตัวอย่างโค้ดสาธิตที่ฉันชอบ แต่ใช้คอนเทนเนอร์ VC รวมถึงการจัดการหน่วยความจำอย่างเหมาะสม - สิ่งสำคัญมากที่ตัวควบคุมมุมมองลูกของคุณจะได้รับการเผยแพร่เมื่อไม่สามารถมองเห็นได้อีกต่อไป
memmons

1
น่าเสียดายที่การสาธิตวิธีใช้ ContainerViewController ไม่ทำงานเพราะเขาไม่มีการตั้งค่าอีเมลบน iPad ของเขา :-(
Ken M. Haggerty

เซสชันนั้นมีตัวอย่างโค้ดหรือไม่
user4951

ตอนนี้คุณมีโค้ดตัวอย่างหรือไม่ฉันต้องการเพราะฉันได้ลองมามากแล้วแต่ยังไม่มีตัวถูกละลาย
iPhone วางโปรแกรม

37

นอกเหนือจากเซสชันวิดีโอ WWDC Session 102 - การใช้งาน UIViewController Containmentที่ไฮเปอร์คริปต์ได้กล่าวไปแล้วเซสชัน Apple WWDC 2012 เรื่อง "The Evolution of View Controllers บน iOS"ยังครอบคลุมหัวข้อนี้และโค้ดตัวอย่างเป็นส่วนหนึ่งของแพ็กเกจโค้ดตัวอย่าง:

https://developer.apple.com/devcenter/download.action?path=/wwdc_2012/wwdc_2012_sample_code/wwdc_2012_session_code.dmg

นอกจากนี้ยังมีตัวอย่างที่นี่: https://github.com/toolmanGitHub/stackedViewControllers


2
+1 กล่าวถึงสถานที่ที่จะได้รับรหัสแพ็คเกจนั้น ฉันมองผ่านมันไปแล้ว
user4951

6
+1 อีกครั้งทำไมทำไม Apple ถึงใส่รหัสเซสชัน WWDC ในหน้าสมาชิกไม่ได้?
axello

+1 คุณช่วยแบ่งปันวิธีรับเส้นทางซอร์สโค้ดนี้ได้อย่างไร
Janak Nirmal

1
@JanakNirmal ซอร์สโค้ดที่คุณมีปัญหาในการรับ? หากต้องการรับรหัส WWDC เพียงทำตามลิงค์ dmg และเข้าสู่ระบบด้วยรหัสนักพัฒนาแอปเปิ้ลของคุณ
JosephH

17
- (void)viewDidLoad{
    [super viewDidLoad];

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition
    self.navigationItem.rightBarButtonItem = 
     [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                                                    target:self 
                                                    action:@selector(button:)] 
                                                                  autorelease];

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs)
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil];
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil];

    //add to the container vc which is self    
    [self addChildViewController:vc1];
    [self addChildViewController:vc2];

    //the entry view (will be removed from it superview later by the api)
    [self.view addSubview:vc1.view];
}

IBAction นี้ทำให้เกิดการเปลี่ยนแปลงระหว่าง VC สองตัว:

-(IBAction)button:(id)sender {
    [self transitionFromViewController:vc1 
                      toViewController:vc2 
                              duration:0.5    
                               options:UIViewAnimationOptionTransitionCurlDown 
                            animations:nil 
                            completion:nil];
}

1
นี่เป็นตัวอย่างที่ยอดเยี่ยม แต่การจัดการหน่วยความจำในกรณีนี้สามารถปรับปรุงได้: stackoverflow.com/a/8453677/849616สำหรับโซลูชันที่เหมาะสมกว่า
Vive

1
ไม่ใช่ว่าคุณคิดผิด แต่ [ตนเอง addChildViewController: vc1]; ไม่สมเหตุสมผล Container VC อาจมีตัวควบคุมมุมมองคอนเทนเนอร์ SEVERAL
user4951

@Vive ฉันมาถึงจุดหนึ่งในโครงการที่ฉันกังวลเกี่ยวกับการจัดการหน่วยความจำ คุณช่วยบอกฉันได้ไหมว่าลิงก์ที่คุณโพสต์ไว้ทำอะไรได้ดีกว่าในแง่ของการจัดการหน่วยความจำ ฉันใหม่มากและมีช่วงเวลาที่ยากลำบากในการเห็นความแตกต่าง
jacobronniegeorge


10

ทำได้:

http://subjective-objective-c.blogspot.com/2011/08/writing-high-quality-view-controller.html

เพียงพอกับความต้องการของคุณหรือไม่?


4
อันที่จริงฉันพบแล้ว แต่น่าเสียดายที่มันเขียนเกี่ยวกับ Ios4 แต่ 5 ได้ทำการเปลี่ยนแปลงที่สำคัญ ตอนนี้ Apple สนับสนุนการสร้าง View Controller Containers แบบกำหนดเองอย่างชัดเจนแม้ว่าดูเหมือนว่าพวกเขาจะไม่ต้องการช่วยเราหาวิธีใช้ ขอบคุณมาก
Undistraction

ช่วยบอกหน่อยได้ไหมว่าพวกเขาพูดอย่างนั้นที่ไหน ไม่ได้สงสัยคุณแค่อยากรู้เพราะฉันก็ดิ้นรนเช่นกัน
Rui Peres

4
ไม่ต้องห่วง. ฉันดูรหัสสำหรับคลาสคอนเทนเนอร์ของเขาและไม่มีใครใช้วิธีการใด ๆ ต่อไปนี้: addChildViewController: removeFromParentViewController, transitionFromViewController: toViewController: ระยะเวลา: ตัวเลือก: ภาพเคลื่อนไหว: การเสร็จสิ้น:, willMoveToParentViewController: และ didMoveToParentViewController: สิ่งที่กล่าวถึงทั้งหมดในการอัปเดต เอกสาร ios5 สำหรับ UIViewController
Undistraction

8

ไม่รู้ว่านี่เป็นตัวอย่างที่ "ดี" หรือเปล่า แต่คุณสามารถรับ Container ViewController ได้ฟรีจากhttps://bitbucket.org/javieralonso/jaacordeonviewcontroller/overview

มันเป็นตัวควบคุมมุมมองคอนเทนเนอร์อุปลักษณ์ของหีบเพลงแบบเต็ม


หาได้ดี นั่นดูมีประโยชน์
Undistraction

3

นี่คือบทช่วยสอน / ตัวอย่างที่ฉันชอบ (พร้อมใช้ iOS7) ในหัวข้อนี้ (ทั้งสามมีซอร์สโค้ดพร้อมใช้งานบน github):

ดูการบรรจุคอนโทรลเลอร์

การเปลี่ยนตัวควบคุมมุมมองคอนเทนเนอร์แบบกำหนดเอง

การเปลี่ยนคอนโทรลเลอร์มุมมองคอนเทนเนอร์แบบโต้ตอบที่กำหนดเอง

แน่นอนว่า Apple เสนอบทความทั้งหมดเกี่ยวกับเรื่องที่ฉันคิดว่าล้ำค่า:

การสร้างตัวควบคุมมุมมองคอนเทนเนอร์แบบกำหนดเอง

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