我有一个UIPopover,它显示一个包含UITextView的普通视图,其中包含一些文本。我设法强调了文字。当弹出窗口被解除并重新打开时,突出显示消失。即使应用程序已关闭,我也希望保持文本突出显示。任何想法如何实现?
我使用的代码如下:
- (void)highlight {
NSRange selectedRange = self.textViewAll.selectedRange;
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]
initWithAttributedString:self.textViewAll.attributedText];
[attributedString addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:selectedRange];
// [highlightedRange addObject:];
// This is where i tried to save each location and length in a mutable array but didn't work
[highlightedRangeLocation insertObject:[NSNumber numberWithInteger:selectedRange.location] atIndex:indexOfHighlight];
[highlightedRangeLength insertObject:[NSNumber numberWithInteger:selectedRange.length] atIndex:indexOfHighlight];
///////////////////////////////////////////////////////////////////////////////
self.textViewAll.attributedText = attributedString;
indexOfHighlight ++ ;
}
- (void)viewDidLoad {
UIMenuItem *highlightMenuItem = [[UIMenuItem alloc] initWithTitle:@"Highlight" action:@selector(highlight)];
[[UIMenuController sharedMenuController] setMenuItems:[NSArray arrayWithObject:highlightMenuItem]];
float sysVer = [[[UIDevice currentDevice] systemVersion] floatValue];
if (sysVer >= 8.0) {
self.textViewAll.layoutManager.allowsNonContiguousLayout = NO;
}
}
有人能指出如何从这里继续吗?
修改1:
关闭popover的代码:
- (IBAction)closeFun:(id)sender {
// self.popoverPresentationController set
[self dismissViewControllerAnimated:YES completion:nil];
// [self dismis]
}
答案 0 :(得分:1)
当弹出窗口被解除时,您是否可以保存[NSUserDefaults standardUserDefaults]中突出显示的文本范围,并在弹出窗口重新出现时检索它?
答案 1 :(得分:0)
我认为问题在于,弹出窗口对突出显示的状态负责,即保持该事实/状态的弹出窗口。
弹出窗口是表示层/用户界面的一部分。当然,亮点代表了一个事实(现在来了) - 完全独立于popover。
例如,突出显示任务可能表示任务到期。或者,将标签突出显示为红色可能意味着银行中的余额为负数。 你看,无论你使用什么用户界面元素,它们只代表一些潜在的商业现实。 但是,您可能会创建一个弹出窗口实例,将其设置为具有突出显示的元素。但是当它关闭时,这个具体的popover实例会死掉。
亮点随之消失。
当你点击某个按钮(我猜)时,会出现一个弹出框,但它是一个不同的实例。这个实例不知道高亮。 即使你以某种方式设法保持popover的一个实例,并且只是隐藏并再次显示它,popover不应该负责知道某些东西是红色还是应该是,(并因此突出显示。)
在你的应用程序中,你应该有一个分离良好的模型层 ...这基本上是一组代表状态的相关对象,即。事实上,这与应用程序从业务角度解决的问题有关(例如,绘制线条,计算兴趣......存储音乐......真正的东西)。这个模型层,其中的一些对象,应该存储事实......任务到期,或者余额很低。
每次显示弹出框时,都应该在显示弹出窗口时调查模型图层中的基本事实。调查意味着找到一种编程方式来查看模型对象,找出那里的值,然后根据这个“调查”再次设置突出显示。你不应该依赖于在不那么遥远的过去强调它的事实。