• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSTextView limit
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSTextView limit


  • Subject: Re: NSTextView limit
  • From: Douglas Davidson <email@hidden>
  • Date: Thu, 25 Jul 2002 12:28:46 -0700

On Thursday, July 25, 2002, at 11:39 AM, Nico wrote:

What I'd like is to limit the number of lines in an NSTextView that's to say, if line #501 is attempting to be added, the line #1 must be deleted so that there is never more than 500 lines in total.

You can use textview delegate methods to control changes to text. In this case it sounds like you don't need to approve or disapprove changes, you just need to be notified of them so you can trim accordingly. In that case you probably want textDidChange:.

The next question is just what you mean by "line". To the Cocoa text system, a line of text is the text laid out on a single visual line, and it can depend on the width of the view. On the other hand, some people think of a "line" as the text between two hard line breaks (such as \n). The Cocoa text system calls that a "paragraph". Depending on the settings of your text view, the two concepts may actually coincide, but usually they are distinct.

Here is a rough example of how to count the lines (in the first sense above) in a text view. Untested, but should give the idea:

NSLayoutManager *layoutManager = [textView layoutManager];
NSRange containerGlyphRange = [layoutManager glyphRangeForTextContainer:[textView textContainer]]; // this forces all text in the container to be laid out, if it was not already laid out
NSRange lineGlyphRange = NSMakeRange(containerGlyphRange.location, 0);
unsigned count = 0;
while (NSMaxRange(lineGlyphRange) < NSMaxRange(containerGlyphRange)) {
(void)[layoutManager lineFragmentRectForGlyphAtIndex:NSMaxRange(lineGlyphRange) effectiveRange:&lineGlyphRange];
count++;
}

Douglas Davidson
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.

  • Follow-Ups:
    • Re: NSTextView limit
      • From: Nico <email@hidden>
References: 
 >NSTextView limit (From: Nico <email@hidden>)

  • Prev by Date: NSTextView limit
  • Next by Date: initWithCoder: called on objects in nibs
  • Previous by thread: NSTextView limit
  • Next by thread: Re: NSTextView limit
  • Index(es):
    • Date
    • Thread