вторник, 12 августа 2014 г.

Решение задач в XCode. Задача 2. Прозрачный NavigationBar

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

Итак, нам понадобится картинка или фон размером 320х64 в формате .PNG (для разных устройств высота панели навигации отличается, для правильного подбора размеров элементов воспользуйтесь ссылкой.

Добавляем картинку в наш проект в XCode. Далее необходимо задать прозрачность для панели и назначить нашу картинку для навигации в качестве backgroundImage.

В списке элементов Interface Builder выберите контроллер навигации, в нем найдите Navigation Bar. В инспекторе атрибутов этой панели навигации задайте стиль:



Вы можете отметить галочкой свойство Translucent, либо задать прозрачность в коде файла реализации как приведено ниже.

В файле реализации .m Вашего главного ViewController (при добавлении контроллера навигации из библиотеки он по умолчанию называется RootViewController) добавьте следующий код в метод ViewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar_grd_2_@2X.png"]forBarMetrics:UIBarMetricsDefault];
    

    self.navigationController.navigationBar.translucent = YES;
}

После написания достаточно простого кода у Вас получится прозрачная панель навигации, при сдвиге ячеек табличного представления за эту панель, они будут выглядеть следующим образом:



Спасибо за внимание!

суббота, 9 августа 2014 г.

Решение задач в XCode. Задача 1. Спрятать клавиатуру.

И снова здравствуйте!

Начинаем решать наиболее часто возникаемую задачу - как убрать клавиатуру после завершения ввода?

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

Способ первый. Использовать имеющуюся на клавиатуре кнопку Done (она же Return Key в Инспекторе Атрибутов текстового поля).



1. Добавление кода в файл заголовка .h

Создайте Outlet соединение нужного текстового поля:

#import <UIKit/UIKit.h>


@interface YCCCarLoanTableViewController : UITableViewController

@property (strong, nonatomic) IBOutlet UITextField *carWorthTextField;


Создайте Action соединение данного текстового поля и выберите тип  события "Did End On Exit"

- (IBAction)carWorthTextEndEditing:(UITextField *)sender;


2. Добавление кода в файл реализации .m

После создания соединения Action в файле реализации автоматически будет добавлен метод

- (IBAction)carWorthTextBeginEditing:(UITextField *)sender{
}

Добавьте в реализацию этого метода следующий код:

- (IBAction)carWorthTextBeginEditing:(UITextField *)sender{

    [sender resignFirstResponder];
}
После запуска программы можете проверить, что клавиатура уходит при нажатии на кнопку возврата.

Способ второй. Настройка прикосновения к фону. Этот способ может пригодиться тем, кто использует клавиатуры без кнопки возврата (например, Decimal Pad). Не работает с UITableView.

1. Работа в Interface Builder

Используя Identity Inspector измените класс своего UIView на UIControl
Это позволит вам создать соединение Action для Вашего View.

2. Добавление кода в файл заголовка .h

Создайте Action соединение для View (как и обычно зажимаете клавишу ctrl и клавишу мыши или тач-панели и ведете соединительную линию к файлу заголовка), выберите тип  события "Touch Up Inside"

- (IBAction)backgroundTap:(UIControl *)sender;

Как и в первом примере, программа сама добавит в файл .m реализацию данного метода

3. Добавление кода в файл реализации .m

Добавьте следующую строку в реализацию данного метода:

- (IBAction)backgroundTap:(UIControl *)sender
{
    [self.carWorthTextField resignFirstResponder];

}

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

Способ третий. Использование InputAccessoryView у текстового поля


Именно этот способ использовался мной при написании кредитного калькулятора. Причиной тому послужила необходимость добавления нескольких кнопок (очистка текстового поля и завершение ввода). В этом методе Вы создаете дополнительный Toolbar с несколькими кнопками над клавиатурой

1. Добавление кода в файл реализации .m

В любом подходящем месте вашего кода (будь-то метод ViewDidLoad или метод Action с типом "Editing Did Begin" у текстового поля) добавьте следующий код создания Toolbar:

UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
numberToolbar.barStyle = UIBarStyleBlackTranslucent; //настройка стиля для панели
numberToolbar.tintColor = [UIColor whiteColor]; // настройка цвета кнопок

//создание массива кнопок
numberToolbar.items = [NSArray arrayWithObjects:[[UIBarButtonItem alloc]initWithTitle:@"Очистить" style:UIBarButtonItemStyleBordered target:self action:@selector(clearField)], // кнопка очистки поля
                           [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], // пустое место для заполнения пространства панели
                           [[UIBarButtonItem alloc]initWithTitle:@"Готово" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],nil];//кнопка завершения ввода

[numberToolbar sizeToFit]; //метод корректного масштабирования панели


self.carWorthTextField.inputAccessoryView = numberToolbar; // применение новой панели к нужному текстовому полю

В результате реализации этого кода, над клавиатурой появится наша панель с кнопками

Теперь необходимо создать методы для обработки селекторов кнопок новой панели

В файл реализации .m добавьте следующие методы:

// завершение ввода
- (void)doneWithNumberPad
{
    [self.carWorthTextField resignFirstResponder]; 

}


//очистка текстового поля
- (void)clearField
{
        self.carWorthTextField.text = @"";

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

На этом все! Надеюсь, что этими способами помог Вам. 
Если есть вопросы, замечания или пожелания, пишите в комментариях. Пишите также что бы Вы хотели узнать из тех методов, что были мной использованы в кредитном калькуляторе (или других моих программах, когда они будут :-)).

Удачи!

Кредитный калькулятор iOS


Всем привет!

Наконец настал подходящий момент для начала ведения блога. Завел я его изначально, чтобы получать фидбэк по приложениям, размещенным мной в Apple Appstore. Затем решил, что в нем было бы не плохо фиксировать свой опыт разработки программ, делиться способами решения проблем, с которыми мне приходилось и приходится сталкиваться.

Итак, Вашему вниманию представлена моя первая программа - довольно простой кредитный калькулятор.





Специально не стал лепить в него всевозможные комиссии, табличные расчеты, сохранение. Он служит лишь для примерной оценки ставок и способов погашения. Самый лучший и правильный расчет Вам предоставит сам банк.

Зачастую пользуюсь калькулятором сам для быстрого подсчета примерной суммы.
За счет слайдеров Вы можете довольно быстро посмотреть разницу в результатах расчета не пользуясь вводом с клавиатуры.

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

С уважением, Павел.

Ссылка на Калькулятор в App Store