如何在基于页面的应用程序中的webview上录制时隐藏/取消隐藏视图

时间:2013-11-01 10:07:20

标签: ios objective-c uiview uiwebview uipageviewcontroller

我想隐藏/取消隐藏灰色视图(其中有按钮)并且它位于奶油/ biege彩色webView之上 - 请参阅附图

PageBased App

我使用了xcode中提供的基于页面的应用程序模板。

方法1:隐藏/取消隐藏控制器 我试图隐藏/取消隐藏在同一个控制器中但问题是每次创建此控制器的新实例并且隐藏/取消隐藏的bool值都会丢失

方法2:协议&代表
我也尝试使用委托/协议来保持其父控制器的状态,但它永远不会进入阻塞 -
if([self.delegateReadingToolbar ........块永远不会被调用。

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];

if(touch)
{

    CGPoint location = [touch locationInView: [touch view]];

    if (CGRectContainsPoint(webViewTouch,  location))
    {

        //do whatever
        NSLog(@"webView Touched");

        if (self.showReadingToolBar)
        {

            self.showReadingToolBar = NO; // approach 1
            self.viewReadingToolBar.hidden = NO;

            // approach 2
            if ([self.delegateReadingToolbar respondsToSelector:@selector(contentViewDidFinish:showStatus:)]) 
            { // this block is never called

                [self.delegateReadingToolbar contentViewDidFinish:self showStatus:NO];

            }


        }
        else
        {

            self.showReadingToolBar = YES;
            self.viewReadingToolBar.hidden = YES;
            [self.delegateReadingToolbar contentViewDidFinish:self showStatus:YES];

        }



    }
}

}

方法2编码:

ChildController.h

@class ChildController;

@protocol ReadingToolbarShowDelegate <NSObject>

-(void)contentViewDidFinish:(contentView *)controller showStatus:(BOOL)show;

@end

@property (nonatomic,weak)id<ReadingToolbarShowDelegate>delegateReadingToolbar;

ParentController.h

#import "ChildController.h"

@interface ParentController :      UIViewController<UIPageViewControllerDataSource,UIPageViewControllerDelegate,ReadingToolbarShowDelegate>

ParentController.m

-(void)ChildControllerDidFinish:(contentView *)controller showStatus:(BOOL)show
{

   showReadingToolbar = show;
}

1 个答案:

答案 0 :(得分:4)

如果您分配/初始化一个新控制器,之前设置的值将会消失。您实际上是在创建一个新对象。我看到了几种不同的方法可以做到这一点。

  1. 将您的控制器放在导航控制器内,只需将其他控制器打开或关闭即可。这样您就不必实例化新对象。

  2. 您可以在NSUserDefaults键/值对中保存所需的显示配置。每当您需要创建此类型的新对象时,它会在NSUserDefault中查找该值。