当弹出窗口消失时,保持 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] 中,并在弹出窗口重新出现时检索它吗?