2012-02-10 35 views
67

Tôi đang cố gắng tạo một cơ chế để xem chi tiết danh sách tệp/thư mục. Ý tưởng là để hiển thị cùng một danh sách tập tin xem bộ điều khiển mỗi khi người dùng chọn một thư mục, và hiển thị một tập tin chi tiết xem bộ điều khiển nếu anh/cô ấy chọn một tập tin.Phân đoạn bảng phân cảnh từ bộ điều khiển xem cho chính nó

Cho đến nay, tôi đã tạo ra một segue từ giao diện điều khiển danh sách tập tin với bộ điều khiển xem chi tiết tập tin, và một segue từ danh sách tập tin di động xem bảng vào danh sách tập tin điều khiển xem bảng:

enter image description here

Vấn đề với điều này là ngay khi người dùng chạm vào ô, khoảng cách được thực hiện. Tôi muốn loại bỏ các segue từ các tế bào xem bảng và làm cho một từ bộ điều khiển danh sách tập tin xem cho chính nó. Bằng cách đó, tôi có thể kích hoạt phân đoạn đúng theo lập trình khi người dùng nhấn vào ô.

Vì vậy, câu hỏi của tôi là: Có thể tạo phân đoạn từ bộ điều khiển chế độ xem cho chính nó trong Trình tạo giao diện không?

+1

Có, sử dụng xcode 5 bạn có thể. [xem bài đăng] (http://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-to-itself/23436265#23436265). –

+0

Mở trình đơn Editor, nhấp vào 'Hiển thị đường viền tài liệu', sau đó chỉ cần kéo nút phải từ ô vào đối tượng Tệp danh sách'ViewController' của Outline. –

Trả lời

25

Tôi đã phát triển phương pháp tạo phân đoạn bằng nút ảo. Tôi tin rằng nó sẽ giải quyết vấn đề của bạn. Bạn có thể đọc về nó trong câu trả lời của tôi here.

+4

Điều này đặt tôi đi đúng hướng. Tôi đã thêm một nút trên "Dock", và kết nối nó với bộ điều khiển danh sách tập tin xem. Bây giờ tôi có thể thực hiện segue theo chương trình như tôi muốn. Cảm ơn! – Jorge

+1

Tôi muốn điều này là không cần thiết chỉ để có được một tự segue, nhưng điều này hoạt động. – jogloran

+2

Giải pháp của Mustafa ít bị hack và khá đơn giản. Việc phân biệt các chế độ xem với các nút ảo sẽ chỉ làm cho bảng phân cảnh của bạn trở thành một mớ hỗn độn. – strada

23

Thay vì thực hiện phân đoạn cho cùng một bộ điều khiển, bạn có thể khởi tạo bộ điều khiển chế độ xem (cùng một) từ bảng phân cảnh và sau đó đẩy điều khiển đó vào bộ điều khiển điều hướng.

+0

Tôi thích giải pháp nút ảo tốt hơn tất cả các chuyển tiếp chuyển tiếp của tôi đi qua PrepareForSegue: thay vì nhớ nếu quá trình chuyển đổi được tạo bằng IB hoặc mã. –

40

Nếu bạn đang sử dụng bộ điều khiển điều hướng, bạn cần phải đẩy ViewController vào ngăn xếp điều hướng. Trong ví dụ này, tôi đặt tên cho ViewController là "VDI" trong thiết lập ID Storyboard của mình.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; 
[self.navigationController pushViewController:dest animated:YES]; 

Nếu bạn không muốn NavigationController tiếp tục tự thêm vào lịch sử "Quay lại", bạn có thể bật ngăn xếp trước khi thêm vào.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle: nil]; 
YourVC *dest = [storyboard instantiateViewControllerWithIdentifier:@"VDI"]; 
UINavigationController *navController = self.navigationController; 
[navController popViewControllerAnimated:NO]; 
[navController pushViewController:dest animated:YES]; 
+0

Cả hai phương pháp này và @ TJ/@ Jorge sẽ hoạt động. Tôi đã đi theo cách này bởi vì nó cảm thấy sạch hơn. Lợi ích mà tôi có thể thấy trong phương pháp khác là bạn có thể thấy các phân đoạn lặp của bạn trong bảng phân cảnh và bạn có thể xử lý tất cả điều hướng trong "PrepareForSegue:" – siburb

+1

Đã hoạt động hoàn hảo! Ngoài ra, đó là "ID bảng phân cảnh" trong XCode mà anh đặt thành "VDI", cho những người đang tìm cách tạo lại điều này. – Nerrolken

13

Trong IOS 6, có a cleaner solution so với sử dụng nút ảo. Bạn vẫn có thể xác định khoảng cách từ ô bảng đến trình điều khiển chế độ xem và xem người gửi để hủy phân đoạn được kích hoạt tự động:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    //storyboards should use segues and override prepareForSegue instead 
    //but here we need custom logic to determine which segue to use 
    id item = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if (item meets condition) { 
     [self performSegueWithIdentifier:@"segue1" sender:self]; 
    } else { 
     [self performSegueWithIdentifier:@"segue2" sender:self]; 
    } 
} 

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    //ignore segue from cell since we we are calling manually in didSelectRowAtIndexPath 
    return (sender == self); 
} 
0

Hy vọng điều này sẽ hữu ích.

Tôi thấy rằng bạn có thể tạo nhiều ô mẫu.

Hơn bạn có thể liên kết mọi ô (trong Bảng phân cảnh) với Chế độ xem khác.

Something như thế này:

NSString *CellIdentifier = @"Cell"; 
if (Condition2){ 
CellIdentifier = @"Cell2"; } 
if (Condition3){ 
CellIdentifier = @"Cell3"; } 
27

Sử dụng Xcode 5 có một nhiều giải pháp đơn giản .

  1. Nhấp vào ô trong bảng trong storyboard
  2. Mở Connections Inspector (biểu tượng mũi tên bên phải ở phía trên bên phải)
  3. Dưới "segues kích hoạt" mà bạn nhìn thấy "lựa chọn"
  4. Kéo từ vòng tròn tiếp theo để "chọn" vào ô trong bảng phân cảnh

Vậy đó.

+2

Cách tiếp cận này hoạt động như một nét duyên dáng không có dòng mã. –

+2

Đây là * câu trả lời đúng cho xcode 5+ và những ngày này bạn nên sử dụng phân đoạn "hiển thị" cho điều này. – CupawnTae

+2

Dường như không hoạt động đối với tôi, bộ điều khiển chế độ xem không trở thành "màu xanh" để cho phép thêm khoảng cách. – db0

3

Đây là cách bạn có thể đẩy một thể hiện của bộ điều khiển xem hiện tại mà không cần xác định một segue hoặc hardcoding nhận dạng riêng của mình:

SameViewController *same = [self.storyboard instantiateViewControllerWithIdentifier: self.restorationIdentifier]; 
[self.navigationController pushViewController: same animated: YES]; 

Bạn chỉ cần thiết lập ID Phục hồi để được giống như Storyboard ID (có một hộp kiểm cho điều đó trong IB).

Restoration ID

4

Interface Builder cách tiếp cận: Chỉ cần Segue đến một tài liệu tham khảo kịch bản trong đó đề cập trở lại với bộ điều khiển xem trình bày.

+1

Cách tiếp cận này là đẹp nhất nếu điều hướng khác được thực hiện với các phân đoạn trong IB! Cảm ơn! –

0

Câu trả lời đúng là sử dụng Tham khảo cốt truyện tham chiếu đến UIViewController mà bạn muốn tự phân biệt và sau đó trỏ phân đoạn vào đó.

enter image description here

Các vấn đề liên quan