Привіт відвідувачам мого блогу. Давно не бачились, (якщо ми взагалі хоч раз в житті будь-де з Вами пересікались). В мене, вже закінчився зошит в якому я занотовува цікавинки з життя Objective-C, тому я вирішив по-перше завести новий зошит, а по-друге надати інформацію отриману за десь пів-року моєї праці перенісши в цифровий вигляд сторінки з зошиту. Хочу наперд сказати нічого наднового Ви не побачите тут, все це можна вигребти з бездни інтернету потративши тьму часу, правда мені здаєтся, що краще просто зайти до мене швиденько в блог і знайти необхідну інфу.
//SimpleViewController.h
@interface SimpleViewController : UIViewController
//SimpleViewController.m
Отож, хотів би розпочати з того, що колупало мій мозок перший час поки я знайомився з мовою Objective-С, а саме delegate та штука довго не проверталась в мене в голові, а конкретно всі етапи її створення та взагалі просто його смисл. Забігаючи наперед маю сказати, що на даному етапі мого розвитку без делегатів в мене не проходить жоден робочий день. Бо як виявилось то штука цікава і корисна.
Для прикладу пропоную реалізувати таку річ:
В нас є контроллер на ньому є якась в'юшка, проста UIView в середину ми додаємо княпавку при натисненні на яку в нас змінюється фон у нашого контроллера НЕ в'юшки!
Я впевнений на всі 100 %, що гуру Objective-C вже закрили даний блог і додали собі в чорний список, бо як можна наводити такі прості приклади, краще б я там навів прикладом парс JSON(а), який качає чаcтинами, з гіговий файл і зберігаючи в NSDocumentDirectory і маркує спеціальним чином щоб його не реджектнули і він не синхронизувався з iCloud. Як варіант можна ще почути:@"Нашо тут делегат два суперв'ю" і ти в контроллері. Ніхто не сперечається, що і так можна просто ми тут люди маленькі займаємось простими речами.
Доречі маю сказати, що я як і багато з піонерів, які пробували писать для Objective-С не під маком (в даному контексті немає жодного натяку на наркотичні речовини), був змушений змиритись, що не треба експерементувати, та мучати мозок собі і людям.
1 - Вам треба MacBook || MacBook pro || Mac Air || iMac || Mac mini.
2 - Xcode.
3 - Базові навички в створенні проекту.
//SimpleView.h
#import <UIKit/UIKit.h>
/*Протокол, метеоди якого необхідно буде реалізувати в контролерах, які будуть використовувати нашу в'юшку */
@protocol SimpleViewDelegate
-(void)changeBackGroundAtController;
@end
@interface SimpleView : UIView
// Екземпляр делегату, який служить для зв'язку.
@property(nonatomic, assign) id<SimpleViewDelegate> delegate;
//Метод який служить для створення нашої в'ю.
- (id)initWithFrame:(CGRect)frame andDelegate:(id<SimpleViewDelegate>) theDelegate;
@end
//SimpleView.m
#import "SimpleView.h"
@interface SimpleView()
//Кажемо, що в нас буде властивість кнопка
@property (nonatomic, retain) UIButton * changeBackgroundButton;
//Метод для додавання до в'ю кнопки
-(void) addingButton;
@end
//Розміри кнопки
CGFloat buttonWidth = 140.0;
CGFloat buttonHeight = 44.0;
@implementation SimpleView
//сетери - гетери
@synthesize delegate = _delegate, changeBackgroundButton = _changeBackgroundButton;
- (id)initWithFrame:(CGRect)frame andDelegate:(id<SimpleViewDelegate>) theDelegate
{
self = [super initWithFrame:frame];
if (self) {
self.delegate = theDelegate;
[self addingButton];
}
return self;
}
-(void) addingButton
{
//Знаходимо координати, де ми маємо розмістити кнопку
CGFloat x = (self.frame.size.width - buttonWidth) /2.0;
CGFloat y = (self.frame.size.height - buttonHeight)/2.0;
//Ініціалізуємо кнопку
UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(x, y, buttonWidth, buttonHeight)];
self.changeBackgroundButton = button;
[button release];
//Вказуємо, що : реалізацію методу треба шукать в цьому класі (self) назва методу
clicked при натисненні та іпіднятті вверх над цією кнопкою
UIControlEventTouchUpInside
[_changeBackgroundButton addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventTouchUpInside];
[_changeBackgroundButton setBackgroundColor:[UIColor yellowColor]];
[_changeBackgroundButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[_changeBackgroundButton setTitle:@"Just click it!" forState:UIControlStateNormal];
//Додаємо до нашої в'ю кнопку
[self addSubview:_changeBackgroundButton];
}
//Реакція на натиснення
-(void)clicked:(UIButton *) button
{
//Зв'язуємося з контроллером через делегата
[_delegate changeBackGroundAtController];
}
//Зільнюємо пам'ять
-(void) dealloc
{
self.changeBackgroundButton = nil;
[super dealloc];
}
@end
//SimpleViewController.h
#import <UIKit/UIKit.h>
@interface SimpleViewController : UIViewController
@end
//SimpleViewController.m
#import "SimpleViewController.h"
#import "SimpleView.h"
@interface SimpleViewController ()<SimpleViewDelegate>
//Проперті нашої нещодавно створенної в'ю
@property(nonatomic, retain)SimpleView * viewWithButton;
@end
@implementation SimpleViewController
@synthesize viewWithButton = _viewWithButton;
- (void)viewDidLoad
{
[super viewDidLoad];
//Ініціалізуємо і створюємо нашу просту в'ю
SimpleView * sView = [[SimpleView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height / 2) andDelegate:self];
self.viewWithButton = sView;
[sView setBackgroundColor:[UIColor blueColor]];
[sView release];
//Додаємо в'ю до контролера
[self.view addSubview:_viewWithButton];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
//Звільнюємо пам'ять
self.viewWithButton = nil;
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
//Встановлюємо що наш додаток працює тільки в портреній орієнтації
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark-
#pragma mark SimpleViewDelegate Methods
//Ловимо відповід про натиснення через делегата
-(void)changeBackGroundAtController
{
//Змінюємо бекграунд(нижню частину екрану) на довільно задану
CGFloat r = random()% 255 / 255.0;
CGFloat g = random()% 255 / 255.0;
CGFloat b = random()% 255 / 255.0;
UIColor * myColor = [UIColor colorWithRed:r green:g blue:b alpha:1];
[self.view setBackgroundColor:myColor];
}
@end
Немає коментарів:
Дописати коментар