将UIViewController转换为UIScrollViewController

时间:2012-07-06 07:12:05

标签: iphone ipad uiviewcontroller uiscrollview uilabel

我是iPad开发人员的新手,

当我在Portrait模式下看到我的应用程序时,我在我的应用程序中创建了一个注册表单, 我能够看到没有滚动的整个表单,但是当我在Landscape模式中看到相同的表单时,我无法看到位于页面底部的部分,因为滚动应该在那里看到底部

s: 在我替换<{p>时的.h文件中

@interface ReminderPage : UIViewController{
...
...
}
带有:UIViewController

:UIScrollView

然后当我在我的.m文件中添加标签时,

UILabel *Lastpaidlbl = [[[UILabel alloc] initWithFrame:CGRectMake(70 ,400, 130, 50)]autorelease];
    Lastpaidlbl.backgroundColor = [UIColor greenColor];
    Lastpaidlbl.font=[UIFont systemFontOfSize:20];
    Lastpaidlbl.text = @"Lastpaid on :";
    [self.view addSubview:Lastpaidlbl];

我在最后一行收到错误在classname类型的对象上找不到属性视图。 我无法在视图中添加标签。

我们将不胜感激。

5 个答案:

答案 0 :(得分:6)

问题似乎是在询问如何将屏幕上的所有组件放在UIScrollView中,而不是放在UIView中。使用Xcode 4.6.3,我发现我可以通过以下方式实现:

  • 在Interface Builder中,选择主UIView中的所有子视图。
  • 选择Xcode菜单项“Editor | Embed In | Scroll View”。

最终结果是在现有的主UIView中嵌入了一个新的滚动视图,UIView的所有以前的子视图现在都是UIScrollView的子视图,具有相同的定位。

答案 1 :(得分:4)

如果要用UIScrollView替换UIViewController,则必须对代码进行一些重构。你得到的错误只是一个例子:

语法:

[self.view addSubview:Lastpaidlbl];
如果self是UIViewController,则

是正确的;因为你把它改成UIScrollView,你现在应该这样做:

[self addSubview:Lastpaidlbl];

对于您的代码,您将会遇到很多类似的更改,并且会遇到一些问题。

另一种方法是:

  1. 实例化UIScrollView(不是从它派生);

  2. 将您的UIView(例如您已定义)添加到滚动视图中;

  3. 定义滚动视图的contentSize,以包含您拥有的整个UIView。

  4. 滚动视图充当现有视图的容器(将控件添加到滚动视图,然后将滚动视图添加到self.view);这样,您就可以将它集成到现有的控制器中:

          1. UIScrollView* scrollView = <alloc/init>
    
          2. [self.view addSubview:scrollView]; (in your  controller)
    
          3. [scrollView addSubview:<label>]; (for all of your labels and fields).
    
          4. scrollView.contentSize = xxx;
    

    我认为后一种方法会容易得多。

答案 2 :(得分:0)

请将所有UIComponents放入UIScrollview,然后它将开始滚动。

请查看内容大小。请根据设备的方向进行更改。

答案 3 :(得分:0)

您正在对UIScrollView进行子类化,因此没有self.view,因为已经self是视图(滚动视图)。您不需要子类化scrollview,您只需将组件嵌入到ivar滚动视图中并设置其contentSize(在您的情况下,您必须在设备处于横向模式时启用滚动)。在界面构建器中,您可以一键嵌入所选元素,编辑器 - &gt;嵌入 - >滚动视图。

答案 4 :(得分:0)

首先创建 scrollview

 UIScrollView *  scr=[[UIScrollView alloc] initWithFrame:CGRectMake(10, 70, 756, 1000)];
    scr.backgroundColor=[UIColor clearColor];
    [ self.view addSubview:scr];

第二次

更改[self.view addSubview:Lastpaidlbl];

      to

[scr addSubview:Lastpaidlbl];

<强>第三

设置高度取决于内容

UIView *view = nil;

 NSArray *subviews = [scr subviews];


 CGFloat curXLoc = 0;

    for (view in subviews)
    {
        CGRect frame = view.frame;
        curXLoc += (frame.size.height);
    }
       // set the content size so it can be scrollable
    [scr setContentSize:CGSizeMake(756, curXLoc)];

最后

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Override to allow orientations other than the default portrait orientation.
    if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft || interfaceOrientation==UIInterfaceOrientationLandscapeRight) {
        self.scr.frame = CGRectMake(0, 0, 703,768);    

        } else {
        self.scr.frame = CGRectMake(0, 0, 768, 1024);
        }


    return YES;
}