2013-09-07 65 views
11

Tôi mới sử dụng Phát triển ứng dụng iOS. Tôi đã kết nối một bộ điều khiển tableview như vậy mà khi tôi chọn một trong các hàng tôi nhận được một UIViewController bằng cách sử dụng didSelectRowAtIndexPath. Tôi có một cái nhìn container bên trong UIViewController này hiển thị (nói cho thời gian được) chỉ số của hàng mà didSelectRowAtIndexPath được gọi. Tôi muốn làm điều này bằng cách sử dụng một segue, nhưng vấn đề là tôi không biết làm thế nào để có được một tham chiếu đến bộ điều khiển xem được hình thành bằng cách sử dụng xem container. Tôi biết bạn có thể có được điểm đến Xem điều khiển bằng cách sử dụng segue.destinationViewController trong preparForSegue nhưng làm thế nào để tôi có được một tham chiếu để xem bộ điều khiển sẽ được tải vì xem container. Tôi đang xây dựng ứng dụng cho iOS 6. Ngoài ra tôi đã sử dụng Storyboard cho giao diện người dùng. Cảm ơnTham khảo chế độ xem vùng chứa

Edit:

Câu hỏi này về cơ bản đi xuống đến làm thế nào để có được một tham chiếu đến UIViewController-2 đang được trỏ bởi UIContainerView đó là bên trong UIViewController-1. Các UIViewController-1 được kích hoạt bằng cách chọn một hàng của UITableViewController

UITableViewController (chọn một hàng để cung cấp) ---> UIViewController-1 chứa .... ContainerView ---> UIViewController-2 (ViewController kết hợp với ContainerView).

+0

Dường như bạn có câu trả lời ở đây: http://stackoverflow.com/a/ 18673394/1187415. Tôi tự hỏi liệu đó có phải là những gì @Mundi đã nói dưới đây không. –

+0

Không đăng cùng một câu hỏi hai lần. Tôi bị cám dỗ để đóng chuỗi này là trùng lặp. –

+1

@DuncanC Tôi muốn có khuynh hướng đóng cái kia, vì nó trùng với cái này. Đây là lần đầu tiên (và rõ ràng hơn). – Rob

Trả lời

26

Ok, chúng ta hãy tưởng tượng kịch bản này:

storyboard

Và chúng ta hãy giả sử bạn muốn cập nhật các nhãn trên rằng "con của điều khiển xem thứ hai" với các dữ liệu mô hình ủng hộ ô bạn khai thác trên bàn lượt xem.

Những gì bạn có thể làm là:

  1. Cho segue từ cảnh đầu tiên đến một giây một định danh duy nhất (ví dụ Detail), xác định một tài sản ở chỗ điều khiển xem thứ hai để nhận được giá trị được thông qua với nó (ví dụ: someStringValue) và viết prepareForSegue để chuyển giá trị, ví dụ:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
        if ([segue.identifier isEqualToString:@"Detail"]) 
        { 
         NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
         [segue.destinationViewController setSomeStringValue:self.objects[indexPath.row]]; 
        } 
    } 
    
  2. Lặp lại quá trình này cho segue nhúng của mình, cụ thể là, cho nhúng của mình Segue định danh duy nhất của mình (ví dụ Embed) và tạo ra một tài sản trong đó "con của điều khiển xem thứ hai" quan điểm điều khiển để nhận được giá trị truyền cho nó (ví dụ someStringValue), và có một prepareForSegue trong bộ điều khiển xem thứ hai mà sẽ vượt qua giá trị cùng với bộ điều khiển xem con của nó, ví dụ:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    { 
        if ([segue.identifier isEqualToString:@"Embed"]) 
        { 
         [segue.destinationViewController setSomeStringValue:self.someStringValue]; 
        } 
    } 
    
+0

nhưng nếu ngăn chặn được thực hiện theo chương trình – Mrug

+0

@Mrug Sau đó, cách tiếp cận hoàn toàn giống nhau, ngoại trừ việc đặt thuộc tính con trong 'prepareForSegue', bạn sẽ làm điều đó trong mã nơi bạn lập trình nhanh và gọi 'addChildViewController'. – Rob

1

Bạn nói đúng về prepareForSegue. destinationViewController sẽ cung cấp cho bạn bộ điều khiển chế độ xem đích.

Tôi không thấy lý do bạn cần bất kỳ điều gì khác. Nếu bạn muốn bộ điều khiển đích chứa bộ điều khiển khác (tại sao?), Bạn có thể cung cấp cho bộ điều khiển đích @property trỏ đến bộ điều khiển đó và bạn có thể đọc và đặt thuộc tính này.

Nhưng câu hỏi vẫn còn - tại sao bạn muốn làm điều đó?

+0

Tôi đang sử dụng vùng chứa để hiển thị một chế độ xem khác. Chế độ xem này thực sự hoạt động như một thanh điều hướng vì thanh điều hướng mặc định có hiệu ứng màu (mà tôi không thích). Câu hỏi tôi hỏi là liên quan đến việc thiết lập một tiêu đề (đó sẽ là một nhãn trong giao diện mới). Hy vọng điều này sẽ xóa lý do tại sao – Roadblock

-1

Khai báo Tái sử dụng số nhận dạng và sử dụng Phương pháp này.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 

    if([segue.identifier isEqualToString:@"nameOfSegue"]) 
     { 

      } 


    } 

lần liên kết dưới đây để tham khảo hơn

Here

0

Nếu tất cả các bạn đang làm là tạo ra một thanh điều hướng mô phỏng sau đó sử dụng một cái nhìn container và một bộ điều khiển xem con là phức tạp vô và Memory- chuyên sâu. Chỉ cần tạo thanh điều hướng mô phỏng của bạn dưới dạng chế độ xem trong bộ điều khiển chế độ xem 1, cung cấp cho nó nhãn có chứa tiêu đề của bạn, treo nhãn lên làm lối ra và đặt nhãn như mong muốn. Nhiều, sạch hơn và đơn giản hơn nhiều.

4

Như người kia đã nói người ta có thể ghi đè lên prepareForSegue để xác định vị trí các bộ điều khiển xem con - Cá nhân tôi thích sử dụng UIViewController.childControllers như bạn có thể truy cập tại một thời điểm khác so với khi segue nhúng xảy ra tức là

-(void)viewDidLoad { 
    for (UIViewController* vc in self.childViewControllers) { 
      if ([vc isKindOfClass:MyChildController.class]) { 
       // do something here 
      } 
    } 
} 

Không thấy bạn làm điều đó, nhưng nếu bạn đang làm việc với storyboards thứ tự của mảng childControllers chính xác như thứ tự trong trình tạo giao diện, do đó bạn có thể trực tiếp tham chiếu đến childViewControllers [0], [1]