Главная » iPhone » Текстовые виды iPhone

0

Класс uiTextview основан на uiview, но его функциональность расширена для предоставления возможностей отображения и редактирования текста, прокручивания и хранения различных шрифтов и цветов. Текстовые виды можно легко испортить, поэтому рекомендуется использовать их исключительно для текстовых частей приложений, например, электронных книг, раздела программы, где нужно делать заметки, или же информационной странички для отображения неструктурированной информации.

Объект uiTextview наследует от uiscroller, являющегося родовым классом прокручивания. Это означает то, что текстовый вид сам по себе уже обладает всей функциональностью прокручивания, поэтому разработчик может сфокусироваться на отобржении содержимого, а не на программировании панелей прокуртки. Класс uiscroller наследует от uiview, который является, как было упомянуто в предыдущем разделе, базовым классом для всех классов видов.

Создание текстового вида

Поскольку uiTextview порожден от uiview, то он создан по подобию объектов основного вида, созданных в предыдущем разделе, т. е. с помощью метода initwithFrame:

‘.’ITextView *textView = [ [ UiTextview alloc ] initwithFrame: viewRect ];

После создания вида можно задать целый ряд различных свойств.

Редактирование

ели текстовый вид будет использоваться для хранения пользовательского вода, то он должен быть редактируемым:

; textView setEditable: YES ];

.ли же вид просто отображает данные, которые не нужно редактировать, то > л возможность должна быть отключена.

Поля

Размер верхнего поля — это единственная настройка, которая может быть установлена в текстовом виде. Это значение представляет число пикселов, которые необходимо отступить от верха текстового вида для вывода текста:

[ textView setMarginTop: 20 ];

Задание содержимого

Задать содержимое текстового вида могут два различных метода: setText и setContentToHTMLString. Как ясно из названий, вызов метода setText приводит к тому, что содержимое отображается как текст, а setContentToHTMLString рассматривает содержимое как Web-страницу. Если вы попытаетесь вызвать setText с использованием содержимого в формате HTML, то оно отобразится как исходный код HTML.

Вот пример текстового отображения:

[ textView setText: @"Hello, world!" ];

a HTML может быть отображен так:

[ textView setContentToHTMLString:

@"<b><center>Hello, World!</center></b>" ];

Отображение текстового вида

Текстовые виды, как правило, присоединены к основному виду окна. Это позволяет позднее добавлять в тот же самый родительский вид другие подвиды, например, панели навигации и элементы управления:

[ mainView addSubview: textView ];

Пример:

отображение отказа от ответственности iPhone

Каждый iPhone, поставляемый Apple, имеет достаточно длинный файл HTML, содержащий официальный отказ от ответственности Apple. Он отображается в правовом разделе приложения Settings. Приводимый далее пример берет этот файл и отображает его в текстовом поле.

Чтобы скомпилировать это приложение, вам потребуется включить оболочку Core Graphics, содержащую процедуры, необходимые для смешивания цветов.

Данное приложение, показанное в листингах 3.5 и 3.6, может быть построено с помощью следующей командной строки пакета инструментов:

$ arm-apple-darwin9-gcc -о MyExample MyExample.m -lobjc

#include <stdio.h> #import "MyExample.h"

-framework CoreFoundation -framework Foundation -framework UIKit -framework CoreGrapnics

#import <CoreFoundation/CoreFoundation.h> #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #import <UIKit/UITextView.h>"

@interface MainView : UlView {

UITextView *textView;

}

-   (id)initwithFrame:(CGRect)frame;

-   (void)dealloc;

@end

@interface MyApp : UIApplication {

UlWindow *window; MainView *mainView;

)

-   (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end

int main(int argc, char **argv) {

NSAutoreleasePool *autoreleasePool = [ [ NSAutoreleasePool alloc ] init

1;

int returnCode = UIApplicationMain(argc, argv, @"MyApp", @"MyApp"); [ autoreleasePool release ]; return returnCode;

•}

@implementation MyApp

-    (void)applicationDidFinishLaunching:(NSNotification *)aNotification ( window = [ [ UlWindow alloc ] initWithContentRect:

[ UIHardware fullScreenApplicationContentRect ]

];

CGRect rect = [ UIHardware fullScreenApplicationContentRect ]; rect.origin.x = rect.origin.у = O.Of;

mainView = [ [ MainView alloc ] initwithFrame: rect ];

( window setContentView: mainView ]; [ window orderFront: self ]; [ window makeKey: self ]; [ window _setHidden: NO ];

}

@end

@implementation MainView

-    (id)initwithFrame:(CGRect)rect { self = [ super initwithFrame: rect ]; if (nil != self) {

FILE *file;

char buffer[262144], buf[1024];

textView = [ [ UITextView alloc ] initWithFrame: rect J;

file = fopen("/Applications/Preferences.app/English.lproj/ acknowledgements-iphone.html", "r");

if (!file) {

CGColorSpaceRef colorSpace =

CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); float opaqueRed[4] = { 1.0, 0.0, 0.0, 1 }; CGColorRef red = CGColorCreate(colorSpace, opaqueRed); [ textView setTextColor: red ];

[ textView setText: @"ERROR: File not found" ]; } else {       ‘ •

buffer[0] = 0;

while((fgets(buf, sizeof(buf), file))!-NULL) { strlcat(buffer, buf, sizeof(buffer));

}

fclose(file);

[ textView setContentToHTMLString:

[ [ NSString alloc ] initWithCString: buffer ]];

[ self aadSubview: textView ];

}

return self;

}

- (void)dealloc

{

[ self dealloc ]; [ super dealloc ];

@end

Как это работает

Пример считывает и отображает содержимое файла следующим образом:

1.     При инициализации приложения создается основной вид и вызывается его

метод initWithFrame.

2.      Метод initWithFrame порождает новый объект uiTextview и назначает размер текста.

3.     Файл legal-disclaimer-iphone.html открывается с помощью метода fopen POSIX С.

4.      Если файл не удается найти, то текущим становится красный цвет, а текстом окна становится сообщение об ошибке.

5.     Если файл найден, то он считывается в текстовый буфер, а затем устанавливается в качестве HTML содержимого окна.

6.     Сам текстовый вид добавляется как подвид в управляющий вид, в котром он отображается пользователю.

Для дальнейшего изучения

Вот несколько эффективных способов протестировать этот пример.

?        Скопируйте HTML-страницу вашего любимого Web-узла на iPhone с помощью SCP. Модифицируйте этот пример, чтобы он отображал ваш файл. Какие ограничения имеются у uiTextview при отображении HTML?

?         Какую еще информацию о стилях шрифта вы можете передать в метод setTextFont текстового вида? Изучите CSS-спецификацию W3C, расположенную по адресу: http://www.w3.org.

?         Проверьте наличие прототипов UITextView.h в каталоге include пакета инструментов. Вы найдете ее в папке/toolchain/sys/usr/include/UIKit/.

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии