2011-09-14 9 views
10

Về cơ bản những gì tôi đang cố gắng tìm ra là, nói rằng tôi có một View Controller, được gọi là V1, có một cái nhìn thường xuyên bên trong nó và một nút . Bây giờ, khi bạn chạm vào nút đó, tôi muốn nút đó tạo một hành động bật lên một Trình điều khiển Xem khác, được gọi là V2, trong cùng một bộ điều khiển chế độ xem, V1.Xcode: Làm thế nào để tạo một bộ điều khiển xem PopUp xuất hiện trong bộ điều khiển xem khác

V2 sẽ bị giảm kích thước một số sao cho nó không lấp đầy toàn bộ màn hình, nhưng bạn vẫn có thể thấy lớp đầu tiên V1 phía sau V2. Vì vậy, về cơ bản, bạn không bao giờ thực sự để lại V1. Tôi hy vọng điều này có ý nghĩa đối với những gì tôi đang cố gắng làm. Tôi biết ứng dụng MTV có chức năng này. Hình ảnh về những gì tôi đang nói đến ở đây: https://docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=en_US

Mã mẫu hoặc ví dụ là những gì tôi đang tìm kiếm.

Cảm ơn

Trả lời

24

Bạn có thể tạo điểm như vậy bằng cách thiết lập kiểu chiếm đoạt tài sản của modalPresentationStyle. Xem ví dụ của tôi dưới đây:

UIViewController *V2 = [[UIViewController alloc] init]; 
V2.modalPresentationStyle = UIModalPresentationFormSheet; 
V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;  
[V1 presentViewController:V2 animated:YES completion:nil]; 
V2.view.superview.frame = CGRectMake(0, 0, 540, 620); //it's important to do this after presentModalViewController 
V2.view.superview.center = V1.view.center; 
[V1 release]; 
+0

tôi nhận được một màn hình đen trắng. Điều này sẽ không hoạt động trên iPhone? –

+0

@ChaseRoberts nó sẽ chỉ hoạt động trên iPad. Trên iPhone, bạn chỉ cần đặt các thuộc tính 'modalPresentationStyle' và' modalTransitionStyle' và không thay đổi các giá trị khác. – Nekto

+0

Mã cho iPhone là gì? – Peter

6

Hãy thử điều này:

V2 *d = [[V2 alloc]initWithNibName:@"V2" bundle:nil];//assuming V2 is name of your nib as well 
d.delegate = self; //Optional:you only need this if you want to delegate 

//create popover and put V2 in the popover view 
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:d]; 
popoverController.delegate = self; //optional 
CGSize size = CGSizeMake(325, 75); // size of view in popover…V2 
popoverController.popoverContentSize = size; 
[d release]; 
[popoverController presentPopoverFromRect:yourButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
+3

tôi đã có cùng một vấn đề, khi tôi đã thử mã này nó đã ném một exeption - "[UIPopoverController initWithContentViewController:] được gọi là khi không chạy dưới UIUserInterfaceIdiomPad." – stanley

+0

Mã này chỉ hoạt động với iPad không có iPhone như trong iPhone không có lớp gọi là 'UIPopoverController' –

0

file .m ---> đây là tập tin thực hiện

-(IBAction)anyAlert:(id)sender{ 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"A Message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK!", @"Other Title", nil]; 
    [alert show]; 
    [alert release]; 
} 

nhớ tuyên bố

-(IBAction)anyAlert:(id)sender; 

trong file .h ---> file header

Nó làm việc cho tôi, hy vọng cho bạn ...

+0

Điều này đã không được chấp nhận và tôi sẽ không khuyên bạn sử dụng Cảnh báo làm phương thức thay thế cho phương thức. – Tommyixi

0

Tạo UIView cho v2 và thêm vào v1.

- (void)viewDidLoad 
{ 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
        action:@selector(aMethod:) 
     forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:@"Show View" forState:UIControlStateNormal]; 
     button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); 
    [self.view addSubview:button]; 
} 

- (void)aMethod:(id)sender 
{ 
    CGRect * imageFrame = CGRectMake(10, 90, 300, 300); 
    V2 *v2 = [[V2 alloc] initWithFrame:imageFrame]; 
    [self.view addSubview:v2]; 
} 
1

Có một thư viện rất tốt để hiển thị một bộ điều khiển xem như Popup trên iPhone thấy ở đây https://github.com/martinjuhasz/MJPopupViewController

+0

Công cụ tuyệt vời. Sử dụng rất thiết thực. Tôi đã tìm kiếm một cái gì đó chính xác như thế này.nhờ liên kết –

+0

Rất tiếc, không hoạt động trên iOS 8 –

+0

KHÔNG hoạt động trên ipad. – Sunita

3

Nếu bạn muốn trình bày điều này như một popup modal trong iOS 8 với một phong cách tương tự như ảnh chụp màn hình của OP đây là những gì tôi đã làm:

UIViewController *V2 = [[UIViewController alloc] init]; // V2 is the popup 
V2.modalPresentationStyle = UIModalPresentationFormSheet; 
V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
V2.preferredContentSize = CGSizeMake(325, 75); // size of popup view 
[V1 presentModalViewController:V2 animated:YES]; // V1 is the current topmost view controller 

tôi thích video này tốt hơn so với sử dụng một UIPopover bởi vì bạn không cần phải gây rối với chiều mũi tên và người dùng không thể đóng nó lại bằng cách Tappin g bên ngoài cửa sổ bật lên.

Các thuộc tính này cũng có thể được đặt trong bảng phân cảnh/nib thông qua trình thiết kế. Để thiết lập ưa thíchContentSize kiểm tra "Sử dụng kích thước ưa thích rõ ràng" và thiết lập các giá trị.

Tính năng này chỉ hoạt động trên iPad.

0

Nếu bạn đang sử dụng Storyboard, bạn có thể làm theo bước này:

  1. Thêm một bộ điều khiển view (V2), thiết lập giao diện người dùng theo cách bạn muốn nó

* dựa trên hình ảnh bạn đã đính kèm

  • thêm UIView - đặt nền thành màu đen và độ mờ thành 0,5
  • thêm UIImageView - đó sẽ là cửa sổ bật lên của bạn (Xin lưu ý rằng hình ảnh và chế độ xem phải không có cùng cấp/phân cấp. Đừng làm cho ImageView con của quan điểm nếu không opacity của UIView sẽ ảnh hưởng đến UIImageView)
  1. hiện tại V2 modally

  2. Nhấp vào segue. Trong thanh tra Thuộc tính, Đặt Bản trình bày là Trên toàn màn hình. Di chuyển hình ảnh động nếu bạn thích

Storyboard

  1. Chọn V2. Trong thanh tra Thuộc tính, Đặt Bản trình bày là Trên toàn màn hình. Kiểm tra Xác Bối cảnh và cung cấp bối cảnh

Storyboard

  1. Chọn MainView của V2 của bạn (Pls. Kiểm tra hình ảnh). Đặt backgroundColor để rõ ràng Màu

Storyboard