2010-09-22 14 views
6

Tôi có ứng dụng điều hướng có chế độ xem chi tiết (UIWebView) với các nút tác vụ ở phía dưới cùng trong thanh công cụ UIToolbar. Tôi muốn thêm 'ghi chú' khi nhấn nút 'ghi chú'. Mọi thứ hoạt động tốt khi chế độ xem web ở chế độ dọc. Tôi nhấn nút ghi chú, giao diện phương thức sẽ mở ra tốt và hoạt động tốt.Bộ điều khiển chế độ xem sẽ không bắt đầu ở chế độ ngang

Sự cố xảy ra khi chế độ xem web ở chế độ ngang. Nếu tôi nhấn nút ghi chú, tất cả mã để mở chế độ xem phương thức sẽ được gọi nhưng tất cả những gì tôi nhận được là một màn hình trắng. Một chú thích: Nếu tôi mở khung nhìn phương thức theo chiều dọc và sau đó xoay thiết bị, nó sẽ chuyển sang chế độ nằm ngang. Nó sẽ không mở chính xác ở chế độ ngang.

Tôi có một nút khác sẽ hiển thị trình soạn thư có hành vi giống hệt nhau. Đây là mã trong UIWebViewController của tôi:

- (IBAction)addNotes:(id)sender 
{ 
    NotesViewController *notesViewController; 

    // create the view controller and set it as the root view of a new navigation 
    // controller 

    notesViewController = [[NotesViewController alloc] initWithPrimaryKey:self.record.primaryKey]; 
    UINavigationController *newNavigationController = 
    [[UINavigationController alloc] initWithRootViewController:notesViewController]; 

    // present the navigation controller modally 

    [self presentModalViewController:newNavigationController animated:YES]; 
    [notesViewController release]; 
    [self.view setNeedsDisplay]; // not sure if I need this! I was trying different things... 
    [self.devotionText setNeedsDisplay]; // ditto... 
    [newNavigationController release]; 
} 

Bất kỳ ý tưởng nào? Tôi đã thử tất cả những thứ khác nhau để không có kết quả. Tôi chỉ nhận được một màn hình trắng không có thanh điều hướng (mặc dù có một thanh trạng thái ở trên cùng).

+0

Bạn đang sử dụng hệ điều hành mới nhất? Tôi đã có vấn đề với việc đẩy một chế độ xem phong cảnh chỉ trong khi ở chân dung trên 3.1.3 ... –

+0

Có, tôi đang chạy SDK 4.0 ... – Glasswing

Trả lời

-1

Bạn không cần số mới Navigation Controlle r.

+0

Tôi đã xóa bộ điều khiển điều hướng và vẫn nhận được cùng một hành vi. Cảm ơn rất nhiều vì đã trả lời. Bất kỳ ý tưởng nào khác? – Glasswing

7

Các phương thức không phải lúc nào cũng nhận thông tin về xoay vòng và nhận thông tin từ thanh trạng thái, thông tin này không hoạt động đúng. Đặt điều này trong chế độ xem của bạnWillAppear để sửa lỗi: [UIApplication sharedApplication].statusBarOrientation = self.interfaceOrientation Và nếu bạn muốn có bộ điều khiển điều hướng bên trong phương thức, bạn cần tạo một bộ điều khiển.

Ngoài ra, bạn không cần setNeedsDisplay. Điều đó chỉ ảnh hưởng đến các khung nhìn hiện tại, không phải là phương thức mà bạn đang trình bày.

+0

Cảm ơn bạn đã trả lời quá nhanh! Tôi đã thử đặt mã statusBarOrientation vào viewViewViewViewView NotesViewController của tôi và tôi vẫn nhận được hành vi tương tự! Tôi cũng đã xóa bộ điều khiển điều hướng mới và vẫn không nhận được gì ... chỉ màn hình trắng. Bất cứ một đề nghị nào khác? – Glasswing

+0

Bạn có thể đăng một số mã cho hàm initWithPrimaryKey không? Đăng một số mã trên tập tin đó sẽ giúp vô cùng! – MishieMoo

+0

Chức năng init rất đơn giản ... tệp xib chỉ là một UIView với một UITextView bên dưới nó. – Glasswing

2

Chà, tôi đã mất ngày về vấn đề đó ... nhưng tôi đã tìm được giải pháp!

Tôi đã gặp sự cố tương tự như bạn đã có: phương thức "presentModalViewController: animated:" chỉ hoạt động ở chế độ dọc.

Sau nhiều lần dùng thử và lỗi, tôi phát hiện ra rằng lý do là tôi có nhiều bộ điều khiển chế độ xem đang hoạt động cùng một lúc. Tôi đã triển khai hệ thống điều hướng chuyển đổi giữa các bộ điều khiển chế độ xem khác nhau, với một phụ huynh xử lý các con. (Tôi không thể sử dụng UINavigationController, bởi vì tôi cần một cái nhìn khác.)

Vì vậy, bộ điều khiển gốc của tôi có đối tượng xem gốc và một vài bộ điều khiển xem con. Khi một bộ điều khiển xem con được kích hoạt, đối tượng xem của nó đã được thêm dưới dạng xem con vào khung nhìn của trình điều khiển chế độ xem gốc.

Phương pháp "presentModalViewController" không thích điều đó. Tuy nhiên, ngay khi tôi thiết lập thuộc tính "parentViewController" của các bộ điều khiển xem con, nó đã hoạt động!

Vấn đề chỉ là "parentViewController" là thuộc tính chỉ đọc. Bạn phải mở rộng lớp UIViewController để bạn có thể truy cập nó.

@interface UIViewController (HelperExtension) 

@property (nonatomic, assign) UIViewController *parent; 

@end 

@implementation UIViewController (HelperExtension) 

- (UIViewController *)parent 
{ 
    return self.parentViewController; 
} 

- (void)setParent:(UIViewController *)parent 
{ 
    [self setValue:parent forKey:@"_parentViewController"]; 
} 

@end 

Vì vậy, bất cứ khi nào bạn thêm chế độ xem bộ điều khiển xem con vào bộ điều khiển chế độ xem cha mẹ, hãy gọi phương thức "setParent:" sau khi thực hiện. Sau đó, nó sẽ làm việc!

+0

Điều này cũng làm việc cho tôi. Bạn đã không sử dụng BCTabBarController bởi bất kỳ thay đổi, phải không? Vì vậy, nhiều rắc rối cho những mũi tên sinh động ít ... –

2

Có cùng vấn đề khi trình bày một bộ điều khiển điều hướng.Hãy chắc chắn để có một cách chính xác thực hiện: shouldAutorotateToInterfaceOrientation

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    BOOL shouldAutorotate = NO; 
    if(isControllerMangingAllOrientations) 
    { 
     shouldAutorotate = YES; 
    } 
    else 
    { 
     shouldAutorotate = (toInterfaceOrientation == UIInterfaceOrientationPortrait); 
    } 
    return shouldAutorotate; 
} 

tôi đã thiết lập các boolean trong phương pháp viewDidLoad, không phải là một ý tưởng tốt. Đặt nó trong phương thức initWithNibName: bundle: là đúng nơi.

+0

chiến đấu với vấn đề này chính xác và quên rằng bởi XCode mặc định 4 được bổ sung thêm: '- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } ' Không có gì lạ khi nó luôn là bức chân dung .... * thở dài * –

0

Nếu bạn sử dụng presentModalViewController chỉ cho hình ảnh động như tôi, bạn có thể sử dụng pushViewController với hình ảnh động như sau câu trả lời;

Showing pushviewcontroller animation look like presentModalViewController

và bạn có thể đóng chế độ xemController như sau;

CATransition* transition = [CATransition animation]; 
transition.duration = 0.3; 
transition.type = kCATransitionFade; 
transition.subtype = kCATransitionFromTop; 

[self.navigationController.view.layer addAnimation:transition forKey:kCATransition]; 
[self.navigationController popViewControllerAnimated:NO]; 

Hy vọng nó giúp ..

0

Tôi có nhiệm vụ hiển thị một máy nghe nhạc video trong chế độ phong cảnh.

AVPlayerViewController *playerViewController = [AVPlayerViewController new]; 
//Player init code goes here.... 

// #define degreesToRadian(x) (M_PI * (x)/180.0) - was defined previously in a class header 

playerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
playerViewController.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
playerViewController.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 

[self presentViewController:playerViewController animated:YES completion:nil];