将子视图添加到UISplitViewController的MasterView

时间:2013-03-03 15:29:38

标签: iphone ios objective-c ipad uisplitviewcontroller

我需要在UIViewController的左侧部分添加一个子视图,该部分向用户显示当隐藏masterview时(纵向),屏幕左侧部分附近有某些内容。此视图必须与UISplitView的左侧部分一起移动。像这两个图像中带箭头的视图。 (对不起俄语界面) http://s2.uploads.ru/8EHJI.png http://s2.uploads.ru/NhEam.png 但我的问题是,当我尝试添加这样的视图时,它会剪切到masterview的边界,并且在隐藏masterview时不可见。我想,我做错了,有一种简单的方法可以做到这一点。

更新:我试图做一些黑客攻击:

-(void) clipToBoundsRecursive:(UIView *)someView
{
    NSLog(@"%@", someView);
    someView.clipsToBounds = NO;
    for (UIView *v in someView.subviews)
    {
        [self clipToBoundsRecursive:v];
    }
}

并将其发送到splitviewcontroller的视图。

UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
[self clipToBoundsRecursive:splitViewController.view];

它首次生效(主视图边界显示之外的子视图,但在第一次显示/隐藏动画后,它们消失,即使我再次调用此方法也不会出现)

4 个答案:

答案 0 :(得分:6)

您可以将视图直接添加到窗口view,但您必须根据设备旋转的时间手动管理其位置。添加到window.view的观看次数将显示在rootViewController.view上方。

答案 1 :(得分:3)

我在这里为您描述了一个简单逻辑 :( 如何在UIView中添加Window并从您的主视图或详细视图中调用它

UIView中创建#import "AppDelegate.h"

- (void) CreateViewInWindow
{
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 780)];// set as u wish
    myView.backgroundColor = [UIColor redColor];

    // I have added myView to the Window with a specific animation , your can give animation as you like. :)
    [UIView transitionWithView:self.window duration:0.5
                       options:UIViewAnimationOptionTransitionCrossDissolve // change to whatever animation you like
                    animations:^ { [self.window addSubview:myView]; }
                    completion:nil];
}

此处在UIButton文件中创建一个简单的DetailViewController.m您可以将代码放入其中一个文件DetailViewController.mMasterViewController.m

UIButton *btnShowView = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnShowView addTarget:self action:@selector(btnShowViewTapped:) forControlEvents:UIControlEventTouchUpInside];
btnShowView.frame = CGRectMake(20, 30, 174, 35);
//[btnLoginInner setBackgroundImage:[UIImage imageNamed:@"LoginBut.png"] forState:UIControlStateNormal];
[self.view addSubview:btnShowView];

在按钮点按的方法中,编写用于从UIView调用AppDelegate的代码,以及不要忘记#import "AppDelegate.h"中添加DetailViewController.m

-(void)btnShowViewTapped:(UIButton *) Sender
{
    AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    [del performSelector:@selector(CreateViewInWindow) withObject:nil afterDelay:0];
}

以上代码是您问题的简单逻辑,可能对您有所帮助。

答案 2 :(得分:2)

听起来我的应用可能会受益于PKRevealController

答案 3 :(得分:1)

尝试在身份中取消选择自动布局选项,如果使用nib则输入pan,否则设置自动调整遮罩以查看当前裁剪。我相信它会解决问题