Предоставление редактируемых и нередактируемых полей на iPhone - PullRequest
7 голосов
/ 16 октября 2010

Я хотел бы представить информацию пользователю моего приложения нередактируемым способом, но разрешить редактирование после нажатия кнопки (кнопки редактирования).Есть ли способ легко создать этот переход от нередактируемого к редактируемому?

Я рассмотрел использование UILabel s для нередактируемых полей и программное удаление их и отображение вместо него UITextField s.Тем не менее, это может привести к большому количеству форматирования в коде, которое я предпочел бы не делать (чтобы сохранить преимущества IB).

Я также подумал о том, чтобы иметь и UILabel и UITextField вто же самое место в моем перо и пытаюсь скрыть то, что я не хочу.Это кажется довольно хакерским.

Может быть, мне лучше всего использовать два отдельных взгляда?

Любые комментарии по вышеописанным методам или более эффективные способы сделать это были бы очень благодарны.

Ответы [ 2 ]

7 голосов
/ 16 октября 2010

если вы установите для свойства enabled UITextField значение NO и измените borderStyle на UITextBorderStyleNone, ваше текстовое поле выглядит почти как UILabel. Может быть, вы хотите переключить эти два значения .. Примерно так:
РЕДАКТИРОВАТЬ: И если вы измените шрифт, они выглядят точно так же, как UILabels.

- (IBAction)toggleEdit:(id)sender {
    for (id subview in self.view.subviews) {
        if ([subview isKindOfClass:[UITextField class]]) {
            BOOL isEnabled = ((UITextField*)subview).enabled;
            ((UITextField*)subview).enabled = !isEnabled;
            if (isEnabled) {
                // Disable
                ((UITextField*)subview).borderStyle = UITextBorderStyleNone;
                ((UITextField*)subview).font = [UIFont systemFontOfSize:17.0];
            }
            else {
                // Enable
                ((UITextField*)subview).borderStyle = UITextBorderStyleRoundedRect;
                ((UITextField*)subview).font = [UIFont systemFontOfSize:12.0];
            }
        }
    }
}
0 голосов
/ 16 октября 2010

Как ответил fluchtpunkt, вы можете сделать то же самое. В противном случае вы можете указать одну метку и одно текстовое поле с одинаковым размером фрейма. И в редактируемом true вы можете скрыть метку, отображающую текстовое поле. А для редактирования false вы можете показывать метку, скрывая текстовое поле.

...