Вычисление разрывов строк каждые N символов? - PullRequest
0 голосов
/ 14 сентября 2010

Я создаю парсер RSS для iPhone и iPod Touch, и мне нужно иметь возможность установить количество строк, отображаемых в каждой ячейке для каждой статьи. Я хотел бы разбить каждые 39 символов, что больше всего подходит для строки с размером шрифта, который я использую.

Я бы хотел взять количество символов в строке и разделить его на количество символов в строке. Я хотел бы получить целое число в качестве ответа, округленное в случае необходимости.

Это то, что я имею до сих пор. Что не так?

NSNumber *lines = [[NSNumber alloc] initWithInteger:[cell.textLabel.text length]/kLineLength];

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

    [formatter setRoundingMode:NSNumberFormatterRoundUp];
    [formatter setRoundingIncrement:[[[NSNumber alloc]initWithInteger:1]autorelease]];

    NSNumber *roundedLines = [[NSNumber alloc]initWithInteger: [[formatter numberFromString:[lines stringValue]]integerValue]];

    [cell.textLabel setNumberOfLines:[roundedLines integerValue]];

    [roundedLines release];
    [formatter release];
    [lines release];

EDIT

Я не столько разрываю строки, сколько знаю, сколько строк нужно присвоить метке. Так что, хотя я эффективно устанавливаю разрывы строк, на самом деле я этого не делаю. Я даю iOS понять, где нужно разбить, я просто говорю, сколько строк использовать.

Ответы [ 3 ]

1 голос
/ 14 сентября 2010

Не делай этого сам.Позвольте UILabel или UITextView или UIWebView сделать это для вас.Каждая буква имеет разную ширину.Не имеет смысла вставлять разрывы строк для каждых N символов.

Я имею в виду, набор текста - сложное искусство, культивируемое со времен Гутенберга в течение сотен лет.Я не смею делать это сам.Оставьте это экспертам (т.е. разработчикам API.)

0 голосов
/ 14 сентября 2010

Не уверен, что это сложное решение, которое вы дали, было шуткой: -)

int numberOfCharacters = ....;
int kLineLength = 39;

int lines = (numberOfCharacters + kLineLength - 1) / kLineLength;

Нет необходимости в каких-либо средствах форматирования и т. Д.

Редактировать: Возможно, вы все равно будете разочарованы фиксированной шириной строки, так как перенос слов (в любом случае!) сделает ваши строки короче.

0 голосов
/ 14 сентября 2010

Я не уверен, чего именно вы здесь пытаетесь достичь, но вы не сможете использовать cell.textLabel и вам придется использовать пользовательский UITableViewCell ..

Также объект UILabel автоматически создает разрывы строк, где это необходимо, если вы установите cell.textLabel.numberOfLines = 2;

...