当弹出窗口被解除时,保持UITextView中的文本突出显示

时间:2015-02-25 13:45:31

标签: ios objective-c uitextview highlight uipopover

我有一个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]

}

2 个答案:

答案 0 :(得分:1)

当弹出窗口被解除时,您是否可以保存[NSUserDefaults standardUserDefaults]中突出显示的文本范围,并在弹出窗口重新出现时检索它?

答案 1 :(得分:0)

我认为问题在于,弹出窗口对突出显示的状态负责,即保持该事实/状态的弹出窗口。
弹出窗口是表示层/用户界面的一部分。当然,亮点代表了一个事实(现在来了) - 完全独立于popover。

例如,突出显示任务可能表示任务到期。或者,将标签突出显示为红色可能意味着银行中的余额为负数。 你看,无论你使用什么用户界面元素,它们只代表一些潜在的商业现实。 但是,您可能会创建一个弹出窗口实例,将其设置为具有突出显示的元素。但是当它关​​闭时,这个具体的popover实例会死掉

  

亮点随之消失。

当你点击某个按钮(我猜)时,会出现一个弹出框,但它是一个不同的实例。这个实例不知道高亮。 即使你以某种方式设法保持popover的一个实例,并且只是隐藏并再次显示它,popover不应该负责知道某些东西是红色还是应该是,(并因此突出显示。)

在你的应用程序中,你应该有一个分离良好的模型层 ...这基本上是一组代表状态的相关对象,即。事实上,这与应用程序从业务角度解决的问题有关(例如,绘制线条,计算兴趣......存储音乐......真正的东西)。这个模型层,其中的一些对象,应该存储事实......任务到期,或者余额很低。

每次显示弹出框时,都应该在显示弹出窗口时调查模型图层中的基本事实。调查意味着找到一种编程方式来查看模型对象,找出那里的值,然后根据这个“调查”再次设置突出显示。你不应该依赖于在不那么遥远的过去强调它的事实。