是否可以从UIWebView对象滚动到UIView对象?

时间:2012-02-22 00:33:57

标签: iphone uiwebview uiscrollview uipagecontrol

在我的应用程序的一个用户界面中,我希望我的应用程序显示滚动视图(滚动页面的计数在运行时动态设置)。但是我希望将UIWebView和UIView元素添加到同一个数组中,这样当我滚动时我将能够显示UIWebView(比如一个网页)和其他一些视图吗?

修改

我收到了这个答案,看起来好像完全正常但不起作用(或者我不能) 这是代码: NSArray * myArray; //在这里用一堆UIWebView和UIView对象填充数组

for (id theObject in myArray)
{
    if ([theObject isKindOfClass:[UIWebView class]]) {
        // do stuff
    }
    else if ([theObject isKindOfClass:[UIView class]]) {
        // do other stuff
    }
}

任何人都可以请求帮助吗?我需要创建一个可滚动的视图数组(如iPhone的主页),但第一页(平均值,视图)必须是UIWebView的成员(其他人是UIView

以下是我的所有代码(我不打算在这里做任何事情:)

  CGRect frame;
     [webView initWithFrame:frame];
    NSArray *colors = [NSArray arrayWithObjects:webView, [UIColor blackColor],[UIColor blackColor],  nil];
        for (int i = 0; i < colors.count; i++) {

        CGRect frame;
        frame.origin.x = self.scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = self.scrollView.frame.size;


        UIView *subview = [[UIView alloc] initWithFrame:frame];
        subview.backgroundColor = [colors objectAtIndex:i];
        [subview setTag:i];
        if([subview tag]==2){
            UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            button.frame = CGRectMake(70.0f, 600.0f, 250.0f, 60);
            [button  setTitle:@"Read Messages" forState:UIControlStateNormal];
                for(NSDictionary* buttonData in butDat) { 
                UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
                NSString* buttonTitle = [buttonData objectForKey:@"name"];
                NSString* buttonID=[buttonData objectForKey:@"order_number"];
                [button setTitle:buttonTitle forState:UIControlStateNormal];
                [button setTag:[buttonID intValue]];
                button.titleLabel.font=[UIFont systemFontOfSize:28];

                 CGFloat yPosition = 60.0f;
                const CGFloat buttonHeight = 85.0f;

                if (button.tag==1) {
                    button.frame = CGRectMake(70.0f, yPosition, 250.0f, buttonHeight);
                    //[ma.view addSubview:button];
                }
                if (button.tag==2) {
                    button.frame = CGRectMake(440.0f, yPosition, 250.0f, buttonHeight);
                    //[ma.view addSubview:button];   
                }
                if (button.tag==3) {
                    button.frame = CGRectMake(70.0f, 200.0f, 250.0f, buttonHeight);
                    //[ma.view addSubview:button];
                }
                if (button.tag==4) {
                    button.frame = CGRectMake(440.0f, 200.0f, 250.0f, buttonHeight);
                    //[menu_2.view addSubview:button];//****

                }
                if (button.tag==5) {
                    button.frame = CGRectMake(70.0f, 335.0f, 250.0f, buttonHeight);
                    //[menu_2.view addSubview:button];//****

                }
                if (button.tag==6) {
                    button.frame = CGRectMake(440.0f, 335.0f, 250.0f, buttonHeight);
                    //[menu_2.view addSubview:button];//****

                }

                [button addTarget:self action:@selector(secondAct:) forControlEvents:UIControlEventTouchUpInside];
                [scrollView addSubview:button];
            }
                //


            [button addTarget:self action:@selector(readM:) forControlEvents:UIControlEventTouchUpInside];
          //  [scrollView addSubview:button];
            [self.view addSubview:button];


            //  [self.scrollView addSubview:button];

        }
        [self.scrollView addSubview:subview];

3 个答案:

答案 0 :(得分:4)

没有什么能阻止您将UIWebViewUIView类型的对象添加到同一NSArray

如果您的代码需要知道您是在处理UIWebView还是UIView,则可以使用isKindOfClass:方法检查:

NSArray *myArray;
// Fill the array with a bunch of UIWebView and UIView objects here

for (id theObject in myArray)
{
    if ([theObject isKindOfClass:[UIWebView class]]) {
        // do stuff
    }
    else if ([theObject isKindOfClass:[UIView class]]) {
        // do other stuff
    }
}

此外,UIWebViewUIView的子类,并且继承了许多相同的方法,使得两种情况下的视图布局都相同。

从用户界面的角度来看,在滚动视图中包含滚动视图可能是不好的做法,因此您需要禁用滚动UIWebView个对象。如果您的目标是iOS 5及更高版本,则可以使用以下内容:

webView.scrollView.scrollEnabled = NO; 
webView.scrollView.bounces = NO;

如果你的iOS版本低于5.0,你可以注入以下javascript:

<script type="text/javascript">
    touchMove = function(event) {
        event.preventDefault();
     }
</script>

要实施javascript注入,您可以在UIWebView

中使用stringByEvaluatingJavaScriptFromString:的{​​{1}}方法

有关webViewDidFinishLoad: javascript注入的更多信息,请参阅此处:http://iphoneincubator.com/blog/windows-views/how-to-inject-javascript-functions-into-a-uiwebview


编辑:查看您的代码,似乎您认为您的数组中包含UIWebView和两个UIWebView对象。因此,您需要检查是否正在处理UIColorUIWebView,否则您将UIColor崩溃。同时您将subview.backgroundColor = [colors objectAtIndex:i];对象的框架设置为{{} 1}}未初始化。

您应该使用UIWebView填充CGRect frame;,然后使用背景颜色设置两个NSArray个对象:

UIWebView

答案 1 :(得分:3)

是。 UIWebViews来自UIViews。您可以在任何将UIView作为子视图插入的地方使用它们,包括在UIScrollView父视图中,或者作为要插入数组的对象。

答案 2 :(得分:2)

您的滚动视图未滚动,因为您未设置contentsize属性。首先,您必须适当地找到内容大小,然后必须将内容大小设置为

[scrollView setContentSize:CGSize];

代码末尾。即;之后

[self.scrollView addSubview:subview];

盲目尝试,请使用

[scrollView setContentSize:CGSizeMake(1000,1000)];

这肯定会滚动视图!!!