从另一个视图控制器隐藏UIWebView上的视图控制器内的值



我有视图控制器A,B,C.视图控制器A具有UIWebView用于显示HTML页面,它突出显示UIWebView上的字符串值。对于要求,当我来自视图控制器 B 时,视图控制器 A 需要在 UIWebView 上显示突出显示文本。当我来自视图控制器 C 时,视图控制器 A 无需显示突出显示文本。但是当我来自视图控制器B和C时,视图控制器A显示突出显示文本。如何隐藏来自视图控制器C的UIWebView上的突出显示文本。可能吗?如何知道我来自视图控制器 B 或 C?如果找到,那么也许有一个解决方案

视图控制器 A :

 - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
      wbCont = [[UIWebView alloc] initWithFrame:CGRectMake(0, 45, 320, 568)];

      [wbCont loadHTMLString:webString baseURL:nil];
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        // getting an NSString
        NSString  *savedValue = [prefs stringForKey:@"got"];

       if (self.displayHighlightedText) {

                if(savedValue){

[self highlightAllOccurencesOfString1:savedValue];
}

}

[self.view addSubview:wbcont];

视图控制器 B :

viewcontroller B *det = [[viewcontroller B alloc] init];
    NSString *decodeString = [self htmlEntityDecode:content];

    [content release];
    det.webString = decodeString;
    [self.navigationController pushViewController:det animated:YES];

视图控制器 C :

viewcontroller c *det = [[viewcontroller C alloc] init];
    NSString *decodeString = [self htmlEntityDecode:content];

    [content release];
    det.webString = decodeString;
    [self.navigationController pushViewController:det animated:NO];

只需将 BOOL 标志从一个视图控制器传递到下一个视图控制器 viewController.It 即可解决您的问题。

在 AViewController 中,从 AViewController 切换到 BViewController 时,像这样传递 BOOL 标志 -

BViewController *aViewController = [[BViewController alloc]init];
bViewController.passFlag = TRUE;
[self.navigationController bViewController animated:YES];

但是在 BViewController.h 中声明这一点 -

@property(nonatomic)BOOL passFlag;

而在 BViewController.m 中 -

@synthesize passFlag;

现在,在 BView控制器检查 -

if(passFlag){
  // highlight text
}else{
  // remove highlighting text
}

通过这种方式,您可以将 BOOL 标志从 BViewController 传递到 CViewController。

希望这对你有帮助。谢谢。

您可以为视图控制器A定义一个 BOOL 属性,该属性告诉它是否显示突出显示的文本。 将以下内容添加到视图控制器A界面 .h 文件中:

@property (nonatomic) BOOL displayHighlightedText;

当您推送/模态A视图控制器时,将属性设置为所需的值(即从视图控制器C设置为 false,从B设置为 true

在视图控制器AviewDidLoad方法中使用此属性:

if (self.displayHighlightedText) {
   [self highlightAllOccurencesOfString1:savedValue];
}

在推送视图控制器之前C编辑的代码中det添加:

det.displayHighlightedText = NO;

在推送视图控制器之前B编辑的代码中det添加:

det.displayHighlightedText = YES;

一种可能的解决方案是使用 NSNotificationCenter。Idea 是在您从视图控制器 C 或 B 前往 A 时发布通知,其中封装了源视图控制器的类名,因此通知的接收者(在这种情况下,我们将查看控制器 A)可以读取类并确定收到通知时该怎么做。这是完成这项工作的一些代码

    //In your B or C view controller exactly before you travel from them to A.
    //If you use UINavigationController and your root controller is A, then you'll have something similar to this
    //In case you are in view controller "B"
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ViewControllerChanged" object:@"B"];
    [self.navigationController popToRootViewControllerAnimated:YES];
//In your A view controller you'll have something similar to this
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewControllerChanged:) name:@"ViewControllerChanged" object:nil];
}
-(void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super viewWillDisappear:animated];
}
-(void)viewControllerChanged:(NSNotification *) notification
{
    NSString * controllerName = notification.object;
    if([controllerName isEqualToString:@"B"])
    {
        //Put code to show the highlighted text here
    }
    else if([controllerName isEqualToString:@"C"])
    {
        //Put code to hide the highlighted text here
    }
}

最新更新