2009-05-27 31 views
11

Tôi đang cố gắng làm điều gì đó không quá phức tạp, nhưng tôi không thể hiểu được. Tôi có một UIViewController hiển thị một UITableView. Tôi muốn trình bày một menu ngữ cảnh khi người dùng nhấn vào một hàng. Tôi muốn đây là chế độ xem nửa công khai với các nhãn và nút. Tôi có thể sử dụng một AlertView, nhưng tôi muốn toàn quyền kiểm soát định dạng của các nhãn và các nút và sẽ thích sử dụng Interface Builder.Chế độ xem iPhone nhỏ hơn màn hình

Vì vậy, tôi đã tạo chế độ xem nhỏ 250x290, đặt alpha thành .75 và tạo bộ điều khiển chế độ xem với các cửa hàng để xử lý các sự kiện người dùng khác nhau.

Bây giờ tôi muốn trình bày nó. Nếu tôi sử dụng các điều kiện hiện tạiModalViewController hai (không mong muốn) xảy ra 1) chế độ xem bao gồm tất cả màn hình (nhưng thanh trạng thái). 2) Đó là nửa công khai, nhưng những gì tôi thấy "đằng sau" nó không phải là chế độ xem gốc mà là chế độ xem gốc của ứng dụng.

Ive đã cố gắng thêm nó như là một subview, nhưng không có gì xảy ra, vì vậy Im không làm điều gì đó đúng:

RestaurantContextVC* modalViewController = [[[RestaurantContextVC alloc] initWithNibName:@"RestaurantContextView" bundle:nil] autorelease]; 
[self.view addSubview:modalViewController.view]; 

Có thể làm những gì tôi muốn? Cảm ơn trước.

Gonso

+0

Hi Gonso! Tôi đang cố gắng làm điều tương tự. Trong giải pháp cuối cùng của bạn, bạn có kết thúc chế độ xem bật lên chế độ xem nhỏ hơn không? (Bài đăng của bạn dưới đây cho thấy vấn đề với phụ huynh nền vẫn tương tác). Bạn có tìm cách tắt tương tác chạm với màn hình chính trong khi vẫn giữ chế độ xem phương thức nhỏ hơn (bên cạnh tính minh bạch một phần, người dùng vẫn có thể xem thông tin cha mẹ xung quanh các cạnh của chế độ xem phụ phương thức) không? Các vòng rect làm việc cho tôi, nhưng tôi lo lắng về người dùng chạm vào xung quanh xem phương thức và nhận được phản ứng bất ngờ. Tôi muốn trở lại duy nhất có thể là các nút trên chế độ xem phương thức. – Cindeselia

Trả lời

11

Tôi đang mã hóa điều tương tự. Cách tiếp cận của tôi bao gồm .....

  1. Không sử dụng dismissModalViewControllerAnimated and currentModalViewController: animated.

  2. Thiết kế chế độ xem có kích thước đầy đủ tùy chỉnh trong IB. Trong phần thân của viewDidLoad, thiết lập màu nền là clearColor, do đó khoảng trống trên khung nhìn không được các bộ điều khiển che phủ là trong suốt.

  3. Tôi đặt UIImageView trong bộ điều khiển của chế độ xem nổi. UIImageView chứa một hình ảnh photoshoped, mà đã làm tròn các góc và nền được thiết lập để minh bạch. Chế độ xem hình ảnh này đóng vai trò là vùng chứa.

  4. Tôi sử dụng CoreAnimation để trình bày/loại bỏ chế độ xem nổi theo kiểu chế độ xem phương thức: (FloatingViewController.m)

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        [self.view setBackgroundColor:[UIColor clearColor]]; 
    
        [UIView beginAnimations:nil context:nil]; 
        [self.view setFrame:CGRectMake(0, 480, 320, 480)]; 
    
        [UIView setAnimationDuration:0.75f]; 
        [self.view setFrame:CGRectMake(0, 0, 320, 480)]; 
        [UIView commitAnimations]; 
    } 
    
+0

nền có màu đen nếu tôi đặt màu thành rõ ràng –

2

Tôi sẽ cân nhắc sử dụng bộ điều khiển điều hướng để trượt trong chế độ xem phụ của bạn thay vì phủ nó. Đây là mô hình dự kiến ​​và bất kỳ lợi ích nhỏ nào bạn có thể nghĩ rằng bạn sẽ nhận được bằng cách làm theo cách riêng của bạn sẽ được bù đắp rất nhiều theo nguyên tắc (ít nhất) bất ngờ.

Nếu bạn thực sự thực sự phải làm theo cách này, tôi tin rằng mẹo là thêm chế độ xem bảng đầu tiên dưới dạng chế độ xem phụ của chế độ xem "giữ" trong suốt mà trình điều khiển chế độ xem duy trì. Sau đó, thêm chế độ xem phụ mới của bạn dưới dạng một chế độ xem phụ khác.

+0

Bạn có thể thêm chế độ xem nhỏ trên chế độ xem gốc bằng cách sử dụng trình điều khiển điều hướng không? Tôi đoán để thiết kế một cái nhìn đầy đủ với các điều khiển trên nó như là một cái nhìn nhỏ và thiết lập nền như minh bạch? –

+0

Tôi có cùng một câu hỏi: Có thể xem lớp phủ nhỏ không? Tôi không muốn che phủ toàn bộ màn hình bằng một slide-in, mặc dù nó không phải là "trượt" làm tôi bực mình nhưng toàn bộ vùng phủ sóng. Tôi muốn giữ cho phụ huynh có thể nhìn thấy một phần vì người dùng hưởng lợi từ việc biết các tùy chọn khác ngoài tùy chọn đã sinh ra chế độ xem phụ. Tôi cũng muốn thiết lập nền như minh bạch, nhưng không cho phép tương tác với màn hình trở lại trong khi chế độ xem phương thức tăng lên. Chế độ xem phương thức sẽ có nút hủy, UIImageView có thể vuốt chi tiết (chuyển đổi giữa các hình ảnh) và nút xác nhận. Cảm ơn bạn! – Cindeselia

1

Một lần nữa, nếu bạn thực sự muốn làm điều này, thay vì thêm chế độ xem "giữ" trong suốt, vì cửa sổ bật lên này về cơ bản là phương thức, tôi sẽ đặt chế độ xem trực tiếp của cửa sổ.

Bạn có thể muốn đặt trong một lá chắn màu đen trong suốt phía sau nó để ngăn chạm vào nền và lấy nét đầu vào trên cửa sổ bật lên.

Nhưng nghiêm túc, hãy cân nhắc bật trình điều khiển trên ngăn xếp hoặc sử dụng chế độ xem cảnh báo đó. Trừ khi bạn đã thuê một nhà thiết kế $$, nó có thể sẽ không phù hợp trên iPhone.

3

wangii

Thats khá nhiều giải pháp tôi tìm thấy. tôi tải quan điểm với loadNibNamed và sau đó chỉ cần thêm nó trên đầu trang với addSubview, như thế này:

//Show a view on top of current view with a wait indicator. This prevents all user interactions. 
-(void) showWaitView{ 
    NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"WaitView" owner:self options:nil]; 
#ifdef __IPHONE_2_1 
    waitView = [ nibViews objectAtIndex: 0]; 
#else 
    waitView = [ nibViews objectAtIndex: 1]; 
#endif   
    CGFloat x = self.view.center.x - (waitView.frame.size.width/2); 
    CGFloat y = self.view.center.y - (waitView.frame.size.height/2); 
    [waitView setFrame:CGRectMake(x,y,waitView.bounds.size.width,waitView.bounds.size.height)]; 
    [self.view addSubview:waitView];  
} 

có thể xây dựng trên điểm 3 và 4?

Những gì tôi đã làm để cung cấp cho xem các khía cạnh tròn rect được đặt nó bên trong một nút tròn tròn.

Mã này thực sự sẽ cho phép bạn có chế độ xem nổi nhỏ, nhưng nếu chế độ xem nhỏ hơn bố mẹ của nó, người dùng có thể tương tác với phần hiển thị của phụ huynh.

Cuối cùng, tôi tạo chế độ xem có cùng kích thước nhưng vẫn giữ mã trong trường hợp.

Gonso

+0

Chờ xem một UIView hoặc một ViewController? Tôi đã thử mã của bạn, và nó nói với tôi rằng waitView không có khung. Tôi có một nib chuẩn bị là tốt, nhưng tôi không thể biến một màn hình nib thành một UIView, chỉ có một UIViewController! – Cindeselia

1

Những gì tôi đã làm là tạo ra một UIViewController trên bộ điều khiển UINavigation tôi trong đại biểu ứng dụng của tôi và làm cho nó một thuộc tính của một đối tượng singleton cho tiện theo dõi:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

//--- create root navigation controller 
self.window.rootViewController = self.navigationController; 

//--- create view controller for popups: 
popupViewController = [[BaseViewController alloc] init]; 
popupViewController.view.backgroundColor = [UIColor clearColor]; 
popupViewController.view.hidden = true; //for rendering optimisation 
[self.window addSubview:popupViewController.view]; 
[AppState sharedInstance].popupViewController = self.popupViewController; 

//--- make all visible: 
[self.window makeKeyAndVisible]; 

return YES; 

}

Tại bất kỳ thời điểm nào trong ứng dụng của tôi, tôi có thể gọi ví dụ:

MyViewController * myVC = [[UIViewController alloc] init]; 
//... set up viewcontroller and its view... 
// add the view of the created view controller to the popup view: 
[AppState sharedInstance].popupViewController.view.hidden = false; 
[[AppState sharedInstance].popupViewController.view addSubview:myVC.view]; 

Các BaseViewController sử dụng trên đầu chỉ thừa hưởng từ UIViewController và thiết lập một cái nhìn toàn màn hình:

//----- in BaseViewController implementation 
- (void)loadView { 
    //------- create root view: 
    CGRect frame = [[AppState sharedInstance] getScreenFrame]; 
    rootView = [[VCView alloc] initWithFrame:frame]; 
    rootView.backgroundColor = [UIColor whiteColor]; 
    self.view = rootView; 
} 
Các vấn đề liên quan