我有视图控制器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
)
在视图控制器A
的viewDidLoad
方法中使用此属性:
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
}
}