2012-01-11 34 views
10

Làm thế nào tôi có thể trình bày một bộ điều khiển chế độ xem từ giao diện ứng dụng của đại biểu, đầu nhất? Đang cố gắng trình bày một bộ điều khiển chế độ xem từ một UIView, điều này làm tôi bối rối.presentModalViewController từ ứng dụng đại biểu

Trả lời

6

Đại biểu ứng dụng không quản lý chế độ xem. Bạn nên trình bày một bộ điều khiển xem phương thức từ phương thức -viewDidAppear: của bộ điều khiển xem đầu tiên được đặt trên màn hình trong -application:didFinishLaunchingWithOptions:.

+0

Tôi thực sự cố gắng để trình bày một modalViewController từ một UIView, và cố gắng để trình bày này trên hầu hết các viewController hàng đầu, bất kỳ ý tưởng? – adit

+1

Bộ điều khiển chế độ xem phương thức chỉ có thể được trình bày bởi các bộ điều khiển chế độ xem khác. Các quan điểm mà họ quản lý không có kiến ​​thức về bộ điều khiển riêng của họ cho phép các bộ điều khiển xem khác. –

+0

Trong khi câu trả lời này chỉ ra một số hiểu lầm của OP, nó không thực sự trả lời câu hỏi. Vui lòng xem lại câu trả lời của tôi: UIWindow – Steve

11

Sử dụng rootViewController của bạn. Bạn có thể trình bày một bộ điều khiển xem phương thức từ bất kỳ lớp con bộ điều khiển xem nào. Nếu gốc của bạn VC là một UITabBarController, sau đó bạn có thể làm:

[self.tabBarController presentModalViewControllerAnimated:YES] 

hoặc nếu nó là một điều khiển chuyển hướng:

[self.navigationController presentModalViewControllerAnimated:YES] 

, vv

EDIT: MVC

Bằng cố gắng trình bày một bộ điều khiển từ bên trong một khung nhìn mà bạn đang phá vỡ mẫu MVC. Nói chung, một khung nhìn có liên quan với sự xuất hiện của nó và lộ ra các giao diện để giao tiếp trạng thái giao diện người dùng với bộ điều khiển của nó. Ví dụ: nếu bạn có một số UIButton trong chế độ xem của mình và bạn muốn nó hiển thị bộ điều khiển chế độ xem phương thức, bạn không khó gắn kết chế độ xem để thực hiện việc này. Thay vào đó, khi bộ điều khiển khởi tạo chế độ xem, bộ điều khiển định cấu hình nút bằng cách đặt chính nó làm mục tiêu để nhận hành động touchUpInside nơi nó có thể hiển thị bộ điều khiển chế độ xem phù hợp.

Chính chế độ xem không (và không nên) có kiến ​​thức ngữ cảnh này để thực hiện công việc của bộ điều khiển.

+2

Không hoạt động nếu 'rootViewController' đã trình bày một bộ điều khiển xem phương thức. – Steve

+0

đúng, đây chỉ là một ví dụ. Tôi không biết toàn bộ logic của ứng dụng OP. Cũng đồng ý với tất cả những hiểu biết kỹ thuật thích hợp là tốt hơn, do đó bạn có thể đi chệch với kiến ​​thức đầy đủ về những gì bạn đang làm khi cần thiết. – XJones

+0

Phương pháp tiếp cận dựa trên 'UIWindow' hoạt động luôn, trên bảng, không có logic tùy chỉnh ... giống như' UIAlertView' hoạt động luôn. – Steve

10

Cách tốt nhất để làm điều này là tạo UIWindow mới, đặt số windowLevel thuộc tính và hiển thị UIViewController trong cửa sổ đó.

Đây là cách hoạt động của UIAlertView.

Interface

@interface MyAppDelegate : NSObject <UIApplicationDelegate> 

@property (nonatomic, strong) UIWindow * alertWindow; 

... 

- (void)presentCustomAlert; 

@end 

Thực hiện:

@implementation MyAppDelegate 

@synthesize alertWindow = _alertWindow; 

... 

- (void)presentCustomAlert 
{ 
    if (self.alertWindow == nil) 
    { 
     CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
     UIWindow * alertWindow = [[UIWindow alloc] initWithFrame:screenBounds]; 
     alertWindow.windowLevel = UIWindowLevelAlert; 
    } 

    SomeViewController * myAlert = [[SomeViewController alloc] init]; 
    alertWindow.rootViewController = myAlert; 

    [alertWindow makeKeyAndVisible]; 
} 

@end 
+0

Làm việc như một sự quyến rũ. –

+0

câu trả lời hữu ích tuyệt vời – Fattie

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