Re: Very strange problem about "setString" method of NSTextView.

  • > That wouldn't work like you expect. Try something like this instead:
    >
    > - (void) mySetString:(NSString *) contentString
    > {
    > [textView setString: contentString];
    > [self performSelector: @selector(updateBookmark) withObject: nil
    > afterDelay: 0.0];
    > }
    >
    > - (void) updateBookmark
    > {
    > // The code that sets the bookmark
    > }

    Thanks for you suggestion. But I have to say this is not a good
    solution....
    I still cannot know when the NSScrollView be updated after
    "setString". Upper solution is too risky when I open a big text file.

    Allen Dang
    <allengnr...>
  • On Dec 30, 2007, at 6:54 PM, Allen Dang wrote:
    >> That wouldn't work like you expect. Try something like this instead:
    >>
    >> - (void) mySetString:(NSString *) contentString
    >> {
    >> [textView setString: contentString];
    >> [self performSelector: @selector(updateBookmark) withObject: nil
    >> afterDelay: 0.0];
    >> }
    >>
    >> - (void) updateBookmark
    >> {
    >> // The code that sets the bookmark
    >> }
    > Thanks for you suggestion. But I have to say this is not a good
    > solution....
    > I still cannot know when the NSScrollView be updated after
    > "setString". Upper solution is too risky when I open a big text file.

    You might need to dive into the supporting classes used within the
    NSText ecosystem.  In particular, NSLayoutManager offers this delegate
    method:

    - (void)layoutManager:(NSLayoutManager *)layoutManager
    didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer
    atEnd:(BOOL)layoutFinishedFlag;
        // This is sent whenever a container has been filled.  This
    method can be useful for paginating.  The textContainer might be nil
    if we have completed all layout and not all of it fit into the
    existing containers.  The atEnd flag indicates whether all layout is
    complete.

    You can grab the text view's layout manager via the -layoutManager
    method.  Setting your class as a delegate and then implementing the
    above method to scroll to the desired location may work?

    (I say "may" because I haven't poked around in this area for a long
    long time.)

    b.bum
  • ÔÚ 2007-12-31£¬ÉÏÎç11:22£¬ Bill Bumgarner дµÀ£º

    > You might need to dive into the supporting classes used within the
    > NSText ecosystem.  In particular, NSLayoutManager offers this
    > delegate method:
    >
    > - (void)layoutManager:(NSLayoutManager *)layoutManager
    > didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer
    > atEnd:(BOOL)layoutFinishedFlag;
    > // This is sent whenever a container has been filled.  This
    > method can be useful for paginating.  The textContainer might be nil
    > if we have completed all layout and not all of it fit into the
    > existing containers.  The atEnd flag indicates whether all layout is
    > complete.
    >
    > You can grab the text view's layout manager via the -layoutManager
    > method.  Setting your class as a delegate and then implementing the
    > above method to scroll to the desired location may work?
    >
    > (I say "may" because I haven't poked around in this area for a long
    > long time.)
    >
    > b.bum
    >

    Oh, yes, it works! Thanks very much!

    Allen Dang
    <allengnr...>
previous month december 2007 next month
MTWTFSS
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Go to today