2013-03-04 29 views
22

Tôi có một ứng dụng có bảng phân cảnh. Tôi đang sử dụng một số View Controller với phân đoạn để chọn từ một cái nhìn bảng tùy thuộc vào mục được chọn. Tôi muốn có một bộ điều khiển xem trang, trong đó các trang sẽ là một hoặc nhiều bộ điều khiển xem từ bảng phân cảnh, thậm chí lặp lại chúng. Tôi đang cố gắng để init Trình điều khiển Chế độ xem trang như sau: .... self.dataSource = self;Sử dụng Trình điều khiển Xem từ bảng phân cảnh theo chương trình trong Trình điều khiển Chế độ xem Trang

UIViewController *initialViewController =[self viewControllerAtIndex:current]; 
NSArray *viewControllers = [NSArray arrayWithObject:initialViewController]; 


[self setViewControllers:viewControllers direction:UIPageViewControllerNavigationOrientationHorizontal animated:NO completion:nil]; 
.... 

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index 
{ 
if ((descriptions.count == 0) || 
    (index >= descriptions.count)) { 
    return nil; 
} 

current=index; 

// Create a new view controller and pass suitable data. 
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; 

Description *description=[DBCompany getDescriptionById:language descriptionId:[[descriptions objectAtIndex:index] integerValue]]; 

UIViewController *viewController=nil; 
if(description.frame==100){ 
    viewController=[[Company100ViewController alloc] init]; 
    ((Company100ViewController*)viewController).companyId = companyId; 
} 
return viewController; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
if ((descriptions.count == 0) || 
    (current-1 < 0)) { 
    return nil; 
} 

return [self viewControllerAtIndex:current-1]; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
if ((descriptions.count == 0) || 
    (current >= descriptions.count)) { 
    return nil; 
} 

return [self viewControllerAtIndex:current+1]; 
} 

Tuy nhiên, viewcontroller xuất hiện bằng màu đen. Tôi nghĩ là vì tôi đang thêm lớp UIviewcontroller nhưng không kết nối nó với bất kỳ chế độ xem nào, XIB, trong trường hợp của tôi với bảng phân cảnh.

Tôi làm cách nào để sử dụng bộ điều khiển chế độ xem khác nhau từ bảng phân cảnh theo chương trình để sử dụng trong bộ điều khiển chế độ xem trang?

Trả lời

53

Nếu bạn xem viewController = [[Company100ViewController alloc] init] thì có điều này không phải là bộ điều khiển được liên kết với bảng phân cảnh hoặc XIB. Để tải bộ điều khiển bằng XIB, bạn phải thực hiện các thao tác sau:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
Company100ViewController * vc = (Company100ViewController *)[sb instantiateViewControllerWithIdentifier:@"vc-identifier"]; 

Trong bảng phân cảnh đảm bảo bạn đặt id của bộ điều khiển xem thành nhận dạng vc; bất kỳ số nhận dạng nào bạn chọn.

+0

cảm ơn. Điều đó hoạt động. –

+11

Lưu ý: Nếu UIPageViewController của bạn nằm trong cùng một bảng phân cảnh với trang UIViewControllers của bạn, bạn có thể chỉ cần sử dụng self.storyboard thay vì UIStoryboard * sb = [UIStoryboard ... –

3

Swift 3

let sb = UIStoryboard(name: "MainStoryboard", bundle: nil) 
let vc = sb.instantiateViewController(withIdentifier: "vc-identifier") 
0

Swift

Trong trường hợp mà bạn muốn init từ UIViewController đối tượng.

guard let vc = storyboard?.instantiateViewController(withIdentifier: "nameVC") else { 
    return 
} 

// add to current view 
view.addSubview(vc.view) 
Các vấn đề liên quan