2012-02-26 36 views
5

Có thể trên iOS rằng chế độ xem luôn luôn nổi trên tất cả các chế độ xem khác. Tôi hỏi điều này vì những gì tôi muốn đạt được là một khung nhìn nổi trên ViewController, và sau đó là một Modal View Controller sẽ xuất hiện, trong khi khung nhìn cụ thể vẫn còn trôi nổi trên Modal View Controller đó (hy vọng bạn sẽ có được những gì tôi đang cố gắng nói).Xem nổi trên tất cả các ViewControllers

Trả lời

8

Có. Bạn có thể thêm chế độ xem của mình vào chính window và đưa nó lên phía trước khi bạn phải.

Trong mã sau được coi là _viewConroller_anotherView là các thuộc tính mạnh mẽ của appDelegate - tất nhiên cấu hình có thể khác nhau.

Mã này sẽ thêm hình vuông nhỏ màu xanh lam ở góc trên bên trái của màn hình.

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

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    _viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    _anotherView = [[UIView alloc] initWithFrame: CGRectMake (0.0,0.0,20.0,20.0)]; 
    [anotherView setBackgroundColor: [UIColor blueColor]];  

    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 

    [self.window addSubView: _anotherView]; 
    [self.window bringSubViewToFront: _anotherView]; //not really needed here but it doesn't do any harm 

    return YES; 
} 
+0

Ok, điều này cũng sẽ hoạt động khi bạn đang sử dụng bảng phân cảnh? – thvanarkel

+0

Tôi tin rằng nó nên, nhưng tôi đã không thử nó ra. Có thể bạn sẽ phải tạo một phương thức để mang _anotherViewToFront và gọi nó sau khi viewControllers thay đổi địa điểm. –

3

Bạn có thể làm như sau nếu bạn đang sử dụng kịch bản và autolayout (lấy cảm hứng từ trả lời đầu tiên)

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *_vc = [sb instantiateViewControllerWithIdentifier:@"FloatingController"]; 

_anotherView = _vc.view; 
[_anotherView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[self.window addSubview: _anotherView]; 

[[VLBConstraintsGenerator sharedInstance] setWidth:200 forView:_anotherView inSuperView:_window]; 
[[VLBConstraintsGenerator sharedInstance] setHeight:200 forView:_anotherView inSuperView:_window]; 
[[VLBConstraintsGenerator sharedInstance] setLeading:0 forView:_anotherView inSuperView:_window]; 


[_anotherView setBackgroundColor:[UIColor grayColor]]; 

[[_anotherView layer] setBorderWidth:1]; 
[[_anotherView layer] setBorderColor:[UIColor yellowColor].CGColor]; 

[self.window makeKeyAndVisible]; 
[self.window bringSubviewToFront:_anotherView]; //not really needed here but it doesn't do any harm 

tất cả các bạn cần làm là để kéo một bộ điều khiển nhìn vào bạn storyboard chính với FloatingController như một ID storyboard

Phương pháp bổ sung

-(void)setWidth:(CGFloat)theWidth forView:(UIView *)theView inSuperView:(UIView *)theSuperView 

{ 
assert([theSuperView isEqual:theView.superview]); 
    NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:theView 
                  attribute:NSLayoutAttributeWidth 
                  relatedBy:NSLayoutRelationEqual 
                  toItem:nil 
                  attribute:NSLayoutAttributeNotAnAttribute 
                 multiplier:1 
                  constant:theWidth]; 


// [cn setPriority:999];//make it variable according to the orientation 
[theSuperView addConstraint:cn]; 
} 


-(void)setHeight:(CGFloat)theHeight forView:(UIView *)theView inSuperView:(UIView *)theSuperView 
{ 
assert([theSuperView isEqual:theView.superview]); 

NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:theView 
                 attribute:NSLayoutAttributeHeight 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:nil 
                 attribute:NSLayoutAttributeNotAnAttribute 
                multiplier:1 
                 constant:theHeight]; 

[theSuperView addConstraint:cn]; 
} 

-(void)setLeading:(CGFloat)theLeading forView:(UIView *)theView inSuperView:(UIView *)theSuperView 
{ 
assert([theSuperView isEqual:theView.superview]); 

NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:theView 
                 attribute:NSLayoutAttributeLeading 
                 relatedBy:NSLayoutRelationEqual 
                 toItem:theSuperView 
                 attribute:NSLayoutAttributeLeading 
                multiplier:1 
                 constant:theLeading]; 

[theSuperView addConstraint:cn]; 
} 
Các vấn đề liên quan