Указатель, который может ссылаться на UITextView или UITextField - PullRequest
2 голосов
/ 22 декабря 2011

Я хочу напечатать форму, которая содержит смесь UITextFields и UITextViews, выполняя одно и то же с каждым независимо от его фактического типа.Чтобы сохранить код в чистоте, я бы хотел присвоить каждому элементу в массиве views одну и ту же переменную, чтобы получить его параметры печати.Я думал, что смогу сделать это с переменной типа id, но я не нашел ничего, что скомпилируется.Код ниже не компилируется, но показывает, что я хочу сделать.Спасибо всем, кто говорит мне, как это сделать правильно.

    id theField;

    //for each field on the page
    for (j = offsetToFirstFormField; j < [self.fields count]; j++) {

        theField = [self.fields objectAtIndex: j];
        printStr = theField.text;
        if ([printStr length] > 0) {

            theFont =  [theField font];
            maxSize =  CGSizeMake(theField.frame.size.width, theField.frame.size.height);
            printStrSize = [printStr sizeWithFont:theFont constrainedToSize:maxSize lineBreakMode:UILineBreakModeClip];
            printRect = CGRectMake((theField.frame.origin.x * xScale) + xOffset, (theField.frame.origin.y * yScale) + yOffset, printStrSize.width, printStrSize.height);
            [printStr drawInRect:printRect withFont:theFont];
        }
    }

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Вы не можете использовать точечный синтаксис с id переменными. Вы должны придерживаться синтаксиса отправки сообщений. Например, вы должны изменить это:

printStr = theField.text;

к этому:

printStr = [theField text];

Если это не помогает, отредактируйте свой вопрос и вставьте фактические сообщения об ошибках, которые вы получаете.

0 голосов
/ 22 декабря 2011

Инкапсулируйте ваши печатные функции в протокол. Таким образом, вы будете использовать id<Printable> вместо id. Ваш протокол будет иметь такие методы, как getText getFont. Или вы можете использовать категорию для расширения существующих классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...