0

我有 viewcontroller A、B、C。 viewcontroller A 有 UIWebView 用于显示 HTML 页面,它突出显示 UIWebView 上的字符串值。对于要求,当我来自视图控制器 B 时,视图控制器 A 需要在 UIWebView 上显示突出显示的文本。当我来自视图控制器 C 时,视图控制器 A 不需要显示突出显示的文本。但是当我来自视图控制器 B 和 C 时,视图控制器 A 显示突出显示的文本。如何在来自 viewcontroller 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];
4

3 回答 3

1

只需将 BOOL 标志从一个 viewController 传递到下一个 viewController。它将解决您的问题。

在 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;

现在,在 BViewController 检查 -

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

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

希望这会帮助你。谢谢。

于 2013-11-14T11:47:44.540 回答
0

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

@property (nonatomic) BOOL displayHighlightedText;

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

viewDidLoad在您的视图控制器方法中使用此属性A

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

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

det.displayHighlightedText = NO;

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

det.displayHighlightedText = YES;
于 2013-11-14T11:42:43.997 回答
0

一种可能的解决方案是使用NSNotificationCenter。当您从视图控制器 C 或 B 到 A 时,Idea 正在发布通知,其中封装了源视图控制器的类名,因此通知的接收者(在这种情况下,我们将查看控制器 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
    }
}
于 2013-11-14T11:57:05.820 回答