当弹出窗口消失时,保持 UITextView 中的文本突出显示
Keep text in UITextView highlighted when the popover is dismissed
我有一个 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 :
关闭弹窗的代码:
- (IBAction)closeFun:(id)sender {
// self.popoverPresentationController set
[self dismissViewControllerAnimated:YES completion:nil];
// [self dismis]
}
我认为问题在于 popover 负责高亮状态,即 .popover 保持 fact/state。
弹出窗口是表示层/用户界面的一部分。当然,突出显示代表了一些事实(现在要抓住了)- 完全独立于弹出窗口。
例如,突出显示任务可能表示任务到期。或者,将标签突出显示为红色可能意味着银行余额为负数。
您会看到,无论您使用什么用户界面元素,它们都只代表一些潜在的业务现实。
但是可能会发生什么,你创建了一个 popover 实例,你将它设置为具有突出显示的元素。但是这个具体的弹出窗口实例在关闭时消失了。
And the highlight dies with it.
当您单击某个按钮(我猜)时,会出现一个弹出窗口,但它是一个 不同的实例。 此实例不知道突出显示。
即使您以某种方式设法让弹出窗口的一个实例保持活动状态,只是隐藏并再次显示它,弹出窗口也不应该负责知道某些东西是红色的还是到期的,(因此突出显示。)
在您的应用程序中,您应该有一个分离良好的模型层...它基本上是一组表示状态的相关对象,即。与应用程序从业务角度解决的问题相关的事实(例如,画线、计算利息……存储音乐……任何事情)。这个模型层,里面有一些对象,应该存储事实..ie.e。任务到期,或余额不足。
每次显示弹出窗口时,您都应该在显示弹出窗口时调查模型层中的基本事实。调查意味着找到一种程序化的方式来查看模型对象,找出那里的值,然后根据这个 "investigation" 再次设置那一刻的高亮显示。你不应该相信它在不久的过去就被强调了这一事实。
你不能在弹出窗口关闭时将突出显示的文本范围保存在 [NSUserDefaults standardUserDefaults] 中,并在弹出窗口重新出现时检索它吗?
我有一个 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 :
关闭弹窗的代码:
- (IBAction)closeFun:(id)sender {
// self.popoverPresentationController set
[self dismissViewControllerAnimated:YES completion:nil];
// [self dismis]
}
我认为问题在于 popover 负责高亮状态,即 .popover 保持 fact/state。
弹出窗口是表示层/用户界面的一部分。当然,突出显示代表了一些事实(现在要抓住了)- 完全独立于弹出窗口。
例如,突出显示任务可能表示任务到期。或者,将标签突出显示为红色可能意味着银行余额为负数。 您会看到,无论您使用什么用户界面元素,它们都只代表一些潜在的业务现实。 但是可能会发生什么,你创建了一个 popover 实例,你将它设置为具有突出显示的元素。但是这个具体的弹出窗口实例在关闭时消失了。
And the highlight dies with it.
当您单击某个按钮(我猜)时,会出现一个弹出窗口,但它是一个 不同的实例。 此实例不知道突出显示。 即使您以某种方式设法让弹出窗口的一个实例保持活动状态,只是隐藏并再次显示它,弹出窗口也不应该负责知道某些东西是红色的还是到期的,(因此突出显示。)
在您的应用程序中,您应该有一个分离良好的模型层...它基本上是一组表示状态的相关对象,即。与应用程序从业务角度解决的问题相关的事实(例如,画线、计算利息……存储音乐……任何事情)。这个模型层,里面有一些对象,应该存储事实..ie.e。任务到期,或余额不足。
每次显示弹出窗口时,您都应该在显示弹出窗口时调查模型层中的基本事实。调查意味着找到一种程序化的方式来查看模型对象,找出那里的值,然后根据这个 "investigation" 再次设置那一刻的高亮显示。你不应该相信它在不久的过去就被强调了这一事实。
你不能在弹出窗口关闭时将突出显示的文本范围保存在 [NSUserDefaults standardUserDefaults] 中,并在弹出窗口重新出现时检索它吗?