【问题标题】:initWithNibName : I have no scroll and no navigation bar?initWithNibName : 我没有滚动条也没有导航栏?
【发布时间】:2012-05-25 09:03:06
【问题描述】:

所以我有一个带有 IBAction 的按钮,它通过它的 initWithNibName 方法指向另一个 ViewController。一切都嵌入在 NavigationController 中。

我还为这个 ViewController 创建了一个 .xib,这是一个快速截图:

这是我的代码:

.h

@interface ModeEmploiController : UIViewController
{
    IBOutlet UIScrollView *scrollView;
    UITextView *vueOffres, *vueInfos, *vueGrilles;
}

@property (nonatomic, retain) IBOutlet UIScrollView *scrollView;

.m

@implementation ModeEmploiController

@synthesize scrollView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
    {
        [scrollView setScrollEnabled:YES];
        [scrollView setContentSize:CGSizeMake(320, 529)];
        // Here I define vueOffres, vueInfos and vueGrilles and for each of them :
        [self.view addSubview:vueGrilles/vueInfos/vueOffres];
    }
}

但是当我运行我的应用程序时,我的滚动未启用,并且我没有导航控制器的导航栏。发生了什么事?

【问题讨论】:

  • 如何初始化导航控制器?
  • 事实上我只是添加了它并把它嵌入到我在 IB 的视图控制器中。

标签: objective-c ios uinavigationcontroller uiscrollview interface-builder


【解决方案1】:

ScrollView 中添加另一个视图,我称之为我的内容视图。做的事

self.scrollView.contentSize = self.contentView.frame.size;

对于导航栏,您需要有一个 uinavigation 控制器并使您的控制器成为导航控制器的 rootviewcontroller。像这样

-(IBAction)MyButton:(id)sender
{
    MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyView" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
    [self.navigationController presentModalViewController:navController animated:YES];
}

【讨论】:

    【解决方案2】:

    xib 中删除您的ModeEmploiController,但保留其子ViewScrollView

    现在单击File's Owner 并将来自身份检查器的ModeEmploiController 放在右侧面板中。

    现在右键单击File's Owner 并将view 的属性连接到ViewscrollViewScrollView

    【讨论】:

    • 您内容的 Size 实际上是 320、529 吗?而且我在您的 ScrollView 中看不到任何子视图,是否以编程方式添加它?
    【解决方案3】:

    您的初始化代码使用了错误的方法。

    由于您使用的是 Storyboard,因此您的视图控制器正在从 nib 文件中取消归档。初始化控件的正确位置是在awakeFromNib 方法中。

    确保您已为滚动视图设置了 IBOutlet 属性并将其连接到情节提要中,然后:

    - (void)awakeFromNib {
        [self.scrollView setScrollEnabled:YES];
        [self.scrollView setContentSize:CGSizeMake(320, 529)];
        // Here I define vueOffres, vueInfos and vueGrilles and for each of them :
        [self.view addSubview:vueGrilles/vueInfos/vueOffres];
    }
    

    这只是留下了您正在添加的子视图的问题。 vueGrilles/vueInfos/vueOffres 是什么?您应该在 viewDidLoad 方法中正确创建此视图并将其添加为子视图,而不是在此初始化程序中。

    【讨论】:

    • 感谢您的建议,但它仍然无法启用滚动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多