Tải bản đầy đủ (.pdf) (212 trang)

Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.6 MB, 212 trang )

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Tự học lập trình iOS từ Cơ Bản – Chuyên
Sâu
Nhiều bạn lập trình viện không có nhiều thời gian đến các trung tâm hoặc các trường học để có thể tham gia
các khóa học lập trình iOS.Các bạn đang mong muốn tìm cho mình được 1 bộ tài liệu học lập trình iOS từ Cơ
Bản – Chuyên Sâu.
DevPro là một trong những trung tâm dạy lập trình iOS online, offline cho các bạn sinh viên, các nhân viên lập
trình muốn tìm hiểu về ngôn ngữ thế hệ mới này để tạo cho mình 1 công việc và 1 mực lương tốt hơn trong
cuộc sống.
Nhưng không phải ai cũng có thời gian và điều kiện đến trung tâm để tham gia khóa học.Thấu hiểu được điều
đó thì trung tâm DevPro đã xây dựng một bộ tài liệu học lập trình iOS từ Cơ Bản – Nâng cao giúp các bạn có
thể tự học lập trình iOS tại nhà mà không phải tốn nhiều thời gian đến các trong tâm.
MỤC LỤC
Nhập môn Objective-C ........................................................................................................................................... 2
Các kiểu dữ liệu cơ bản trong Objective C ............................................................................................................ 2
Biến, hằng số, toán tử trong Objective C .............................................................................................................. 5
Cấu trúc điều khiển trong Objective C................................................................................................................... 6
Cơ bản về hàm, class trong Objective C ................................................................................................................ 9
Hướng dẫn cách sử dụng block trong Objective C.............................................................................................. 14
Cấu trúc của một chương trình trong lập trình IOS ............................................................................................ 17
Tạo ứng dụng Helloworld sử dụng Objective C (tạo ứng dụng Iphone đầu tiên trên iOS)................................ 19
Tìm hiểu về Label, Button, TextField, Slider, Switch, Page Control trong iOS.................................................... 24
Tìm hiểu về Progress View, Activity View, Segmented Control, Switch trong ios ............................................. 29
Quản lý bộ nhớ trong IOS (Memory Management)............................................................................................ 32
Điều hướng sử dụng Navigation controller ........................................................................................................ 37
Hướng dẫn sử dụng Tabbar ViewController mở Webview, ImageView, Mapkit. ............................................. 48
Hướng dẫn sử dụng file xib trong IOS. ................................................................................................................ 59
Hướng dẫn sử dụng TableView trong IOS .......................................................................................................... 64
Tương tác row selection trong Tableview .......................................................................................................... 72
Hướng dẫn xóa 1 hàng trong TableView............................................................................................................. 76


Hướng dẫn sử dụng Sidebar ................................................................................................................................ 79
Hướng dẫn phân trang trong IOS sử dụng file xib .............................................................................................. 89
Hướng dẫn sử dụng CollectionView trong IOS ................................................................................................... 95
Hướng dẫn tương tác với CollectionView ........................................................................................................ 105
Thêm Header và Footer trong UICollectionView .............................................................................................. 114
Phân tích XML parser ......................................................................................................................................... 122
Hướng dẫn phân tích JSON................................................................................................................................ 129
Hướng dẫn load dữ liệu từ Json vào TableView ............................................................................................... 143
Hướng dẫn Localization(đa ngôn ngữ) cho ứng dụng của bạn ........................................................................ 155
Hướng dẫn thêm tính năng chia sẻ cho ứng dụng của bạn .............................................................................. 163
Hướng dẫn sử dụng một máy quay và playback. ............................................................................................. 169
Hướng dẫn xây dung một máy ảnh đơn giản sử dụng UIImagePickkerViewcontroller .................................. 174
Vào ra file trong ios ............................................................................................................................................ 179
AutoLayout trong ios ......................................................................................................................................... 183
Hướng dẫn sử dụng SQLite trong ios ................................................................................................................ 190
Hướng dẫn sử dụng Coredata trong ios ............................................................................................................ 203
Page 1 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

I.

Nhập môn Xcode và Objective-C
1. Nhập môn Objective-C
Objective-C là ngôn ngữ được Apple phát triển từ C và có tính hướng đối tượng. Cụ thể tính
đối tượng như thế nào mình sẽ hướng dẫn các bạn trong các bài học của mình.
Để bắt đầu, bạn cần phải sử dụng hệ điều hành Mac OS (trên máy Mac hoặc Hackintosh) và
dĩ nhiên là phải cài ứng dụng Xcode (do Apple phát triển và cung cấp miễn phí). Để nhận
dạng ứng dụng Xcode thì bạn nhìn vào hình nhé!


2.

3.
4.
5.

II.

Bạn cần một máy tính MAC OS hay Laptop tương thích hoặc Laptop cấu hình tốt…
MAC OS giá khá đắt.
Laptop cài song song yêu cầu cấu hình tương thích, chạy ổn định như MAC giá rẽ hợp
sinh viên.
Laptop cấu hình mạnh, ram 8GB cài máy ảo yếu hơn cài song song.
Bạn cần tạo một tài khoản Apple ID để phát triển phầm mềm
Vào trang này để khởi tạo tài khoản .
Tải về Xcode trên máy MAC từ MAC App Store
Đăng nhập bằng Apple ID để tải Xcode từ MAC App Store.
Sau khi cài đặt xong
Một khi hoàn tất quá trình cài đặt, bạn sẽ tìm thấy Xcode trong phần Launchpad.

Các kiểu dữ liệu cơ bản trong Objective C
Như các bạn đã biết muốn tìm hiểu bất cứ ngôn ngữ nào ban đầu ta luôn tìm hiểu các kiểu dữ
liệu của chúng. Việc nắm bắt được phạm vi, cách dùng các kiểu dữ liệu giúp các bạn lập trình
không bị sai, hiểu được cách quản lý từng đoạn code .
Bài đầu tiên mình giới thiệu cụ thể các kiểu dữ liệu nguyên thủy và các kiểu dữ liệu đối tượng
trong Objective C.
1. Các kiểu dữ liệu nguyên thủy trong C
Trong Objective C, hầu hết các kiểu dữ liệu cơ bản trong ngôn ngữ lập trình C đều sử dụng
được một cách trực tiếp bao gồm integer (int), float, char, double,float,enum, … Trong C++

cũng được dụng nhưng phải sử dụng file trung gian để kết nối.
Boolean
bool
Ký tự
char
1 byte [-127 tới 127 hoặc 0 - 255]
Page 2 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Số nguyên

Số thực
Số thực dạng double
Kiểu không có giá trị
Kiểu wide character





unsigned char
signed char
int
unsigned int
signed int
short int
unsigned short int
signed short int

long int
unsigned long int
signed long int
float
double
long double
void
wchar_t

1 byte
1 byte
4 byte
4 byte
4 byte
2 byte
Range
Range
4 byte
4 byte
4 byte
4 byte
8 byte
8 byte

[0 - 255]
[-127 - 127]
[-2147483648 - 2147483647]
[0 - 4294967295]
[-2147483648 - 2147483647]
[-32768 - 32767]

[0 - 65535]
[-32768 - 32767]
[-2147483647 - 2147483647]
[0 - 4,294,967,295]
[-2147483647 - 2147483647]
[+/- 3.4e +/- 38 (~7 ký số)]
[+/- 1.7e +/- 308 (~15 ký số)]
[+/- 1.7e +/- 308 (~15 ký số)]

2 hoặc 4 byte

[1 wide character]

signed (kiểu có dấu)
unsigned (kiểu không có dấu)
short
long

Các kiểu dữ trên trong Objective C sử dụng giống trong C cơ bản! ! !
Ví dụ: cách khai báo
--------------------------------------------------------------------------------------------------------------------------int a = 5;
float b = 5.5;
double c = 11.11;
char str[5] = “objec”;
unsign int uI = 8;
--------------------------------------------------------------------------------------------------------------------------2.

Các kiểu dữ liệu đối tượng trong Objective C
NSString
Kiểu chuỗi ký tự trong Objective C. Kiểu NSString không thể thay đổi.

Ví dụ: khai báo NSString
---------------------------------------------------------------------------------------------------------------------NSString *str1 = [[NSString alloc] init]; //Khai báo cách 1
NSString *str2 = @”test”;
//Khai báo cách 2
---------------------------------------------------------------------------------------------------------------------NSData
Dùng để chứa dữ liệu binary. Có thể dùng để chứa dữ liệu binary của files, video, image,
audio,…
NSObject
Kiểu đối tượng gốc (root) được tạo ra để các đối tượng khác kế thừa.
id
Kiểu đối tượng đại diện trong Objective C. Nếu đối tượng kiểu id nó có thể là bất cứ đối
tượng nào.
NSMutableString
Page 3 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

-

-

-

III.

Kiểu chuỗi ký tự trong Objective C. Kiểu NSMutableString có thể thay đổi.
Lưu ý: NSMutableString không được khai báo tắt theo cách 2 (phần ví dụ NSString).
NSArray
Kiểu đối tượng mảng chứa các kiểu dữ liệu khác, có thể bao gồm nhiều kiểu dữ liệu.

Không thể thay đổi nội dung của mảng.
Duyệt mảng thông qua giá trị chỉ số mảng tuần tự (index).
Ví dụ
---------------------------------------------------------------------------------------------------------------------//Cách khai báo 1
NSArray *arr1=[[NSArray alloc]initWithObjects:@"ngo",@(5), nil];
//Cách khai báo 2
arr0=@[@(1),@"2"];
---------------------------------------------------------------------------------------------------------------------NSMutableArray
Tương tự như NSArray nhưng có thể thay đổi nội dung của mảng.
NSDictionary
Kiểu dữ liệu như cuốn từ điển gồm khóa(key) và giá trị (value) của từ khóa. Không thể
thay đổi được nội dung.
Ví dụ
---------------------------------------------------------------------------------------------------------------------//Cách 1
NSDictionary *dict1=[[NSDictionary
alloc]initWithObjectsAndKeys:@(1),@"key",@(2),@"key1", nil];
//Cách 2
NSDictionary *dict=@{@"key1":@(1),@"key":@(2)};
---------------------------------------------------------------------------------------------------------------------NSMutableDictionary
Giống NSDictionary nhưng thay đổi được nội dung.
NSNumber
Là kiểu dữ liệu số của bất cứ loại số nào (int, float, double, long,…).
NSInteger
Kiểu dữ liệu tương tự int trong C.
CGFloat
Tương tự kiểu nguyên thủy float . framework graphic tùy biến thành CGFloat.
true/false hay YES/NO
Có 3 kiểu chính
BOOL (8bit) : YES/NO dùng trong Objective C
bool (16/32/64/… bit tùy môi trường) : true/false

Boolean (8bit) : TRUE/FALSE
Ví dụ
---------------------------------------------------------------------------------------------------------------------Boolean boolA = TRUE;
bool boolB = true;
BOOL boocC = YES;
----------------------------------------------------------------------------------------------------------------------

Biến, hằng số, toán tử trong Objective C
Ở phần trước mình đã làm rõ khái niệm kiểu dữ liệu, giới thiệu các kiểu dữ liệu nguyên thủy c,
c++, cũng như các kiểu dữ liệu đối tượng trong Objective C. Mình cũng đã sử dụng các biến để
thử các kiểu dữ liệu. Bài này mình sẽ làm rõ biến là gì? , hằng số là gì?, cách dùng? Giới thiệu các
loại `11`toán tử …
Page 4 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

1.

2.

3.

Biến
+) Bộ nhớ máy tính được tổ chức đơn vị nhỏ nhất là là ô nhớ (đơn vị byte). Biến cơ bản
là lưu trong ô nhớ trong bộ nhớ máy tính, được dành riêng để lưu trữ các dữ liệu và truy
xuất giá trị.
+) Mỗi biến có một tên riêng lưu trữ một giá trị riêng tùy vào kiểu dữ liệu.
+) Mỗi biến và giá trị sẽ tự mất đi trong bộ nhớ nếu ứng dụng ngừng chạy.
+) Giá trị của các biến có thể thay đổi được.

+) Cách truy xuất biến trong Objective C, như thế nào ? Mình minh họa một số ví dụ sau:
Ví dụ
Cách khai báo biến: kiểu dữ liệu [tên biến] = giá trị biến;
---------------------------------------------------------------------------------------------------------------------//int[kiểu dữ liệu] bien[tên biến] = 8[giá trị biến];
int bien = 8;
---------------------------------------------------------------------------------------------------------------------Giá trị của biến có thể thay đổi được
---------------------------------------------------------------------------------------------------------------------int a = 1;
int b = 2;
a = a+b;
//Kết quả trả về a = 3;
---------------------------------------------------------------------------------------------------------------------Hằng số
Hằng số cũng là biến, nó có thể được khai báo là biến thường hay biến con trỏ.
Biến hằng số: có giá trị không thể thay đổi được trong toàn ứng dụng.
Giá trị của biến hằng số được gán ngay sau khi khai báo biến.
Hằng số thường được khai báo ở đầu đoạn code hoặc Class chạy đầu tiên nhất trong ứng
dụng.
Khai báo:
{
int const hangSoA = 8;
}
Chúng ta không thể thay đổi giá trị của hangSoA một khi đã khai báo. Nếu thay đổi chương
trình sẽ báo lỗi khi chạy.
Toán tử
Toán để gán : “=”
Dùng để gán giá trị cho một biến, có thể dùng để gán biến này cho biến kia hoặc gán
hàm cho một biến.
Ví dụ
---------------------------------------------------------------------------------------------------------------------int a = 6;
int b = a;
---------------------------------------------------------------------------------------------------------------------Toán tử số học : “+-*/%”

+ phép cộng, - phép trừ, * phép nhân, / phép chia.
Dùng để cộng, trừ, nhân, chia các biến % là phép lấy số dư.
Ví dụ
---------------------------------------------------------------------------------------------------------------------int a = 1;
int b = 2;
int cong = a + b;
//trả về 3
int tru = b – a;
//trả về 1
int nhan = a * b;
//trả về 2
Page 5 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

-

-

-

-

-

IV.

int chia = b / a;
//trả về 2

int du = a % b;
//trả về 1
---------------------------------------------------------------------------------------------------------------------Toán tử phức hợp : “+=, -=, *=, /=”
Ví dụ
---------------------------------------------------------------------------------------------------------------------int a = 1;
a += 1;
//Tương đương với a = a + 1 (2). Áp dụng với các phép toán khác.
---------------------------------------------------------------------------------------------------------------------Toán tử tăng, giảm giá trị : “++, --”
Ví dụ
---------------------------------------------------------------------------------------------------------------------int i = 1;
i++;
//Tăng 1 đơn vị (i = i +1).
i--;
//Giảm 1 đơn vị (i = i – 1).
---------------------------------------------------------------------------------------------------------------------Toán tử quan hệ : “==, !=, >=, <=, >, <”
Đây là các phép toán tử so sánh
“==”: bằng
“!=” : khác
“>” : lớn hơn
“<” : bé hơn
“>=”: lớn hơn hoặc bằng
“<=”: bé hơn hoặc bằng
Toán tử logic : “!, &&, ||”
“!”
: không phải
“&&”
: và
“||”
: hoặc
Toán tử điều kiện : “?”

Ví dụ
---------------------------------------------------------------------------------------------------------------------int a = 1;
int b = 2;
a>b?NSLog(@“dung”):NSLog(@”sai”); //Nếu a > b thì trả về “dung”, ngược lại “sai”
----------------------------------------------------------------------------------------------------------------------

Cấu trúc điều khiển trong Objective C
Bài này mình sẽ giới thiệu các cấu trúc điều khiển trong Objective C. Cũng giống các ngôn ngữ
khác cấu trúc điều khiển là rất quan trọng, giúp điều hướng code, chạy giải thuật một cách tuyệt
vời.
Để giúp các bạn hiểu rõ, mình sẽ giới thiệu cụ thể cách khai báo và cách dùng của từng cấu trúc
một cách cụ thể.
1.

Cấu trúc IF, IF ELSE kiểm tra true or false:
IF : Cấu trúc if chỉ thực hiện khi điều kiện trả về đúng
Khai báo tổng quát
if(điều kiện đúng){
//Thực hiện khi điều kiện đúng
}
Ví dụ
--------------------------------------------------------------------------------------------------------------------------Page 6 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

//Khai báo 2 biến
int tuoi = 22;
NSString *ten = @”Nguyen Van A”;
//Kiểm tra điều kiện

if(tuoi==22&&[ten isEqualToString:@”Nguyen Van A”]){
NSLog(@“Tuoi cua %@ la %d”, ten, tuoi);
}
//Trường hợp này sẽ log ra kết quả nếu tên là “Nguyen Van A” và tuổi là 22
--------------------------------------------------------------------------------------------------------------------------IF ELSE : Khi điều kiện đúng thì thực hiện lệnh trong if, ngược lại nếu điều kiện sai thì thực
hiện lệnh trong else
Khai báo tổng quá
if(điều kiện){
//Thực hiện nếu điều kiện đúng
}
else{
//Thực hiện nếu điều kiện sai
}
Ví dụ
--------------------------------------------------------------------------------------------------------------------------if([ten isEqualToString:@”Nguyen Van B”]){
//Nếu tên là “Nguyen Van B” thì log ra “Day la B”
NSLog(@”Day la B”);
}
else{
//Ngược lại log ra “Day khong phai la B”
NSLog(@”Day khong phai la B”);
}
------------------------------------------------------------------------------------------------------------------- -------Vòng lặp
 Vòng lặp hữu hạn : biết được số lần lặp
for(giá trị biến khởi tạo; điều kiện lặp; bước nhảy sau mỗi lần lặp){
//code
}
Đầu tiên khai báo biến khởi tạo gán giá trị khởi tạo, kiểm tra nếu biến khởi tạo thoả mãn
điều kiện thì thực hiện các dòng code bên trong thân hàm for, cuối cùng tăng biến khởi
tạo theo bước nhảy, nếu không thoả mãn thoát khỏi vòng for và vòng lặp cứ thực hiện

như thế đến khi out vòng for.
Ví dụ
---------------------------------------------------------------------------------------------------------------------//Log ra các số tự nhiên từ 1 đến 10
for(int i = 1; i <= 10; i++){
NSLog(@“%d”, i);
}
---------------------------------------------------------------------------------------------------------------------Ban đầu i = 1, kiểu tra thấy i <= 10 (true), thực hiện log ra giá trị i (1). Sau đó tăng i = i + 1,
tương tự như thế lặp lại cho đến khi i = 11, không thỏa mãn điều kiện vòng lặp for nữa.
Vòng for sẽ dừng lại.
 Vòng lặp hữu hạn : duyệt từng đối tượng trong danh sách các đối tượng
Ví dụ
---------------------------------------------------------------------------------------------------------------------//Khai báo một mảng lưu danh sách cách đối tượng string.
Page 7 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

NSArray *arr = @[@"2",@"4",@"6",@"8"];
for (NSString *str in arr) {
NSLog(@"%@",str);
}



---------------------------------------------------------------------------------------------------------------------Vòng lặp khai báo một đối tượng str kiểu NSString, duyệt từng đối tượng trong mảng
arr, mỗi một lần lặp ->đối tượng trong mảng được duyệt lần lượt lưu tạm trong đối
tượng str, làm việc từng đối tượng thông qua str.
Vòng lặp vô hạn
while(điều kiện){
//code

}
Nếu điều kiện còn thoã mãn là true thì vòng lặp vô hạn, lặp với điều kiện … nếu điều kiện
không đúng thì đoạn mã trong vòng lặp sẽ không được thực hiện lần nào.
Ví dụ
---------------------------------------------------------------------------------------------------------------------int a = 0;
while(a!=-1){
NSLog(@”%d”, a);
a++;
}
}
sẽ lặp vô hạn, điều kiện luôn đúng vì a có kết quả luôn khác -1
{
int a = 0;
while(a < 5){
NSLog(@”%d”, a);
a++;
}
---------------------------------------------------------------------------------------------------------------------khi đó vòng lặp sẽ bị dừng khi a >= 5, lặp hữu hạn với điều kiện, kết quả : 0 1 2 3 4
Trong trường hợp nếu muốn vòng lặp while thực hiện ít nhất một lần, bất kể điều kiện
như thế nào thì ta thực hiện vòng lặp do while.
Ví dụ
---------------------------------------------------------------------------------------------------------------------int a = 6;
do{
NSLog(@”%d”, a);
}
while(a < 5);
---------------------------------------------------------------------------------------------------------------------a (6) vẫn được log ra một lần dù không thỏa mãn điều kiện while (a < 5).

Cấu trúc điều khiển với nhiều lựa chọn
Chúng ta có thể sử dụng IF lồng nhau để đưa ra nhiều lựa chọn với nhiều điều kiện khác

nhau. Tuy nhiên nhìn code sẽ rắc rối khó quản lý, Ở trong Objective C cũng như các ngôn ngữ
khác, có hỗ trợ kiểu nhiều lựa chọn.
switch(biến){
case [điều kiện 1]:
break;
Page 8 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

case [điều kiện 2]:
break;
default:
break;
}
Với điều kiện truyền vào, điều kiện sẽ kiểm tra xem nó đúng với case nào sẽ thực hiện các
lệnh trong case đó. Nếu không đúng với case nào, sẽ thực hiện các dòng lệnh default. Và như
thế chúng ta có nhiều lựa chọn.
Ví dụ
---------------------------------------------------------------------------------------------------------------------int a = 1;
switch(a){
case 1:
NSLog(@"true 1");
break;
case 2:
NSLog(@"true 2");
break;
default:
NSLog(@"default");
break;

}
---------------------------------------------------------------------------------------------------------------------Ở đây điều kiện truyền vào là a, với a = 1, sẽ thực hiện case 1 : Trả về kết quả “true 1”.
Full code ví dụ
/>
V.

Cơ bản về hàm, class trong Objective C
Trong bài viết này, mình sẽ giới thiệu về 1 khái niệm mới “hàm ” và “class” trong Objective C .
Mình sẽ giúp các bạn biết cách khai báo một hàm, class, cách gọi hàm , gọi class, hiểu về tính chất
của class, Cách truyền tham số cho hàm…
Khởi tạo dự án mới đặt tên:

Page 9 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Đầu tiên mình sẽ giới thiệu về hàm trong Objective C : làm việc trên file ViewController.m
Cách khai báo hàm tổng quát:
-(void) tenham{
//code thực thi
}






Đơn giản khai báo hàm không có tham số truyền vào
-(void) tenham{

NSLog(@”test”);
}
Hàm có tham số truyền vào
Tổng quát : Đối với nhiều tham số truyền vào, (kiểu dữ liệu)tênBiến1 :(kiểu dữ
liệu)tênBiến2
lưu ý: Sau tên Biến phải có dấu cách xong mới đến dấu ‘:‘
-(void) tenham: ([kiểu dữ liệu])tenbien1 nhacnho:([kiểu dữ liệu]tenbien2{
}
Ví dụ : tính tổng a và b
----------------------------------------------------------------------------------------------------------------------(void) tong:(int)soA : (int)soB{
int tong = soA + soB;
NSLog(@”%d”, tong);
---------------------------------------------------------------------------------------------------------------------}
Hàm có tham số truyền vào thêm gợi ý chức năng của hàm
-(void) tenham : (kiểu dữ liệu)tenbien goiy: (kiểu dữ liệu) tenbien{
//code
}
lưu ý: Sau tên Biến phải có dấu cách xong đến gợi ý mới đến dấu ‘:‘
Ví dụ
----------------------------------------------------------------------------------------------------------------------(void) tong: (int)soA Cong: (int)soB{
int tong = soA + soB;
Page 10 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

NSLog(@”%d”, tong);
}
---------------------------------------------------------------------------------------------------------------------(Gợi ý giúp ta hiểu thêm về chức năng của hàm).
Để gọi hàm trong Objective C

Tổng quát:
[self tênhàm];
Ví dụ
--------------------------------------------------------------------------------------------------------------------------------[self tong:1 Cong:2];
--------------------------------------------------------------------------------------------------------------------------------Tiếp theo mình sẽ giới thiệu về class trong Objective C
Ở đây mình sẽ giới thiệu các bạn cách khai báo và sử dụng class, mình không đi sâu ý nghĩa class
kế thừa … ngôn ngữ nào ý nghĩa cũng giống nhau 🙂
=>Để tạo một class: newFile -> đặt tên sinhVien kế thừa từ NSObject!

Cách khai báo class
@interface Tênclass : NSObject
@end
NSObject là lớp gốc của hầu hết các Mục tiêu-C phân cấp lớp. Qua NSObject , đối tượng thừa kế
một giao diện cơ bản cho các hệ thống thời gian chạy và khả năng để hành xử như các đối tượng
Objective-C.
tại file sinhsinhVien.h
Ví dụ
--------------------------------------------------------------------------------------------------------------------------------@interface sinhVien : NSObject
@end

Page 11 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

--------------------------------------------------------------------------------------------------------------------------------Để khai báo thuộc tính sử dụng từ khoá:
@property kiểudữliệu tên thuộc tính.
-(void) tênPhươngThức => đây là thuộc tính bình thường truy xuất thông qua đối tượng gọi đến
thuộc tính của nó.
+(void) tênPhươngThức =>đây là thuộc tính tĩnh (static) có thể truy xuất thông qua class gọi đến

thuộc tính, đối tượng gọi đến class.
-(instancetype) Hàmkhởitạo: truyền tham số => giống contructor trong java đây là hàm khởi tạo
sẽ được gọi khi tạo một đối tượng có tham số (của 1 class).
-Hàm init (giống contructor trong java) là hàm không tham số, ngay khi tạo một đối tượng hàm
này sẽ được gọi, từ IOS7 trở lên xcode tự tạo hàm không có tham số.
get set thuộc tính, IOS7 xcode tự động gen.
Ví dụ
--------------------------------------------------------------------------------------------------------------------------------@interface sinhVien : NSObject
@property int tuoi;
@property NSString *ten,*email;
-(void) thongtin;// ham
+(void) diemSV;// hàm static
-(instancetype)initSinhVien:(NSString*)tenSV :(int)tuoiSV :(NSString*)email;
@end
--------------------------------------------------------------------------------------------------------------------------------tại file sinhvien.m thêm đoạn mã sau để viết code cho hàm init , hàm get set,hàm phương thức.
Ví dụ
--------------------------------------------------------------------------------------------------------------------------------// sinh ra bien the hien va sinh ra get set!mac dinh duoc ta ra.
@synthesize ten=_ten;
@synthesize tuoi=_tuoi;
@synthesize email=_email;
//contructor mac dinh! mac dinh duoc ta ra
- (instancetype)init
{
self = [super init];
if (self) {
NSLog(@"init");
}
return self;
}
// contructor co tham so!

-(instancetype)initSinhVien:(NSString*)tenSV : (int)tuoiSV :(NSString *) email{
self=[super init];
self.ten=tenSV;
self.tuoi=tuoiSV;
self.email=@"maibinX";
return self;
}
// chi dung doi tuong de goi!
-(void) thongtin{
Page 12 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

NSLog(@"thong tin");
}// ham static co the dung class de goi ra ! ham static khong su dung duoc cac thuoc tinh binh
thuong
+(void) diemSV{
NSLog(@"diem sinh viên");
}
--------------------------------------------------------------------------------------------------------------------------------Tạo một đối tượng của class trong Objective C, cách gọi thuộc tính và phương thức class.
Vào file ViewController.h
--------------------------------------------------------------------------------------------------------------------------------#import "sinhVien.h"
--------------------------------------------------------------------------------------------------------------------------------Vào file ViewController.m trong -(void)viewDidLoad{} thêm đoạn mã:
--------------------------------------------------------------------------------------------------------------------------------- (void)viewDidLoad {
// khai báo đối tượng không có tham số.
sinhVien *sv=[[sinhVien alloc]init];
[sv setTen:@"binh"];
[sv setEmail:@"maibinhpro"];
[sv setTuoi:22];

NSLog(@"tên:%@, tuổi:%d, email: %@",[sv ten],[sv tuoi],[sv email]);
[sv thongtin];
[sinhVien diemSV];
}
--------------------------------------------------------------------------------------------------------------------------------Tạo một đối tượng không tham số:
Ngay lật tức init không tham số được gọi. và log ra “init”. Tiếp theo set các giá trị thuộc tính cho
đối tượng. NSLog ra thông tin sv. Cuối cùng gọi đến 2 phương thức của đối tượng: phương thức
bình thường [sv thongTin], phương thức (static) [sinhVien diemSV].
Kết quả:
--------------------------------------------------------------------------------------------------------------------------------init
tên:binh, tuổi:22, email: maibinhpro
thong tin
diem sinh viên
--------------------------------------------------------------------------------------------------------------------------------Tạo một đối tượng có tham số:
-(void)viewDidLoad{} thêm đoạn mã:
--------------------------------------------------------------------------------------------------------------------------------//khai báo đối tượng có tham sô.
sinhVien *sv1=[[sinhVien alloc]initSinhVien:@"dat" :23 :@"maidat"];
NSLog(@"tên:%@, tuổi:%d, email: %@",[sv1 ten],[sv1 tuoi],[sv1 email]);
[sinhVien diemSV];
[sv1 thongtin];
--------------------------------------------------------------------------------------------------------------------------------Ngay lật tức init có tham số được gọi. Và tự set các giá trị cho thuộc tính của đối tượng. NSLog ra
thông tin sv. Cuối cùng gọi đến 2 phương thức của đối tượng: phương thức bình thường [sv
thongTin], phương thức (static) [sinhVien diemSV].
Kết quả:
Page 13 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

--------------------------------------------------------------------------------------------------------------------------------tên:dat, tuổi:23, email: maidat

diem sinh viên
thong tin
--------------------------------------------------------------------------------------------------------------------------------Full link code : />
VI.

Hướng dẫn cách sử dụng block trong Objective C
1. Sơ lược về Objective C
Như chúng ta đã biết một biến có thể lưu một giá trị, một đối tượng có bao gồm các thuộc
tính, phương thức… Tuyệt vời! Block hỗ trợ chúng ta lưu một đoạn code sẽ được sử dụng,
tương tác nhiều lần. Bài này mình sẽ giúp các bạn tìm hiểu về Objective C.
Khai báo block
Định nghĩa block
Truy vấn block, và tính chất block.
Ứng dụng block
Đầu tiên khởi tạo dự án mới:

Ta làm việc trên file ViewController.m
--------------------------------------------------------------------------------------------------------------------------- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a
}
--------------------------------------------------------------------------------------------------------------------------

Đầu tiên Cách khai báo một block
Một block khai báo tổng quát:
kiểu dữ liệu trả về (^tên block)(kiểu dữ liệu 1,kiểu dữ liệu 2,kiểu dữ liệu 3);
+) Đơn giản nhất block không có tham số truyền vào :
Page 14 of 212



[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Kiểu trả về “void”, tên block “_in”, không tham số truyền vào “( )”.
---------------------------------------------------------------------------------------------------------------------void (^_in)();
---------------------------------------------------------------------------------------------------------------------+) block một tham số:
Kiểu trả về “int”, tên block “myBlock”, 1 tham số truyền vào “( int)”.
---------------------------------------------------------------------------------------------------------------------int (^myBlock)(int);
---------------------------------------------------------------------------------------------------------------------+) block nhiều tham số truyền vào:
Kiểu trả về “void”, tên block “myBlock”, 2 tham số truyền vào “( int,int)”.
---------------------------------------------------------------------------------------------------------------------//block nhiều tham số
void (^inSo)(int,int);//khai báo
---------------------------------------------------------------------------------------------------------------------

Định nghĩa block
Định nghĩa block tổng quát:
---------------------------------------------------------------------------------------------------------------------blockX=^(tham số1, tham số2 , tham số3){code};
---------------------------------------------------------------------------------------------------------------------Ví dụ
block _in : đơn giản ta chỉ log chuỗi.
---------------------------------------------------------------------------------------------------------------------_in=^(){
NSLog(@"infor");
};
---------------------------------------------------------------------------------------------------------------------block myBlock: truyền vào tham số “num”, log ra thông tin “num”, và trả về giá trị num.
---------------------------------------------------------------------------------------------------------------------myBlock= ^(int num){//định nghĩa
NSLog(@"%d",num);
return num;
};
---------------------------------------------------------------------------------------------------------------------block inSo: truyền vào 2 tham số “soA” “soB”, tính tổng và log ra giá trị tổng.
---------------------------------------------------------------------------------------------------------------------inSo=^(int soA,int SoB){//định nghĩa
int tong=soA+SoB;
NSLog(@"%d",tong);

};
----------------------------------------------------------------------------------------------------------------------



Truy vấn block, và tính chất block
Truy vấn tổng quát:
---------------------------------------------------------------------------------------------------------------------tên block(tham số 1, tham số 2, tham sô3);
---------------------------------------------------------------------------------------------------------------------Ví dụ
block _in :
---------------------------------------------------------------------------------------------------------------------_in(); //kết quả infor
Page 15 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

---------------------------------------------------------------------------------------------------------------------block myBlock:
---------------------------------------------------------------------------------------------------------------------myBlock(7); //kết quả 7
---------------------------------------------------------------------------------------------------------------------block inSo:
---------------------------------------------------------------------------------------------------------------------inSo(6,4); //kết quả 10
---------------------------------------------------------------------------------------------------------------------Thêm đoạn mã sau:
---------------------------------------------------------------------------------------------------------------------int i=100; //lấy được giá trị của biến bên ngoài hàm!!!
void (^inI)()=^(){
NSLog(@"%d",i);
};
inI();
---------------------------------------------------------------------------------------------------------------------ở đây trong block không truyền tham số biến i vào nhưng ta vẫn sử dụng biến i được !!!
Tính chất rất tuyệt vời của block custom (block lấy được các biến địa phương ngay trước
khi khai báo đó).
khi chạy cho kết quả: 100.

---------------------------------------------------------------------------------------------------------------------int i=100; //lấy được giá trị của biến bên ngoài hàm!!!
void (^inI)()=^(){
NSLog(@"%d",i);
};
inI();
i=200
;
inI();
---------------------------------------------------------------------------------------------------------------------gán lại giá trị biến i=200 tuy thế khi gọi block kết quả vẫn trả về :100
như thế block chỉ tham chiếu giá trị chứ k tham chiếu ô nhớ.


Ứng dụng block
Các bạn đã làm quen với block cách khai báo, định nghĩa , truy vấn. Ở đây mình đưa ra
một ví dụ về cách áp dụng block :
Ví dụ
----------------------------------------------------------------------------------------------------------------------(int) addInfor: (int)intX{
intX=6;
NSLog(@"so:%ld",(long)intX);
return intX;
}
---------------------------------------------------------------------------------------------------------------------Gọi hàm:
---------------------------------------------------------------------------------------------------------------------int soA;
[self addInfor:[self addInfor:soA]];
---------------------------------------------------------------------------------------------------------------------khi đó hàm luôn trả về : so:6.

Page 16 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]


Tính chất lưu lại giá trị trên hàm chỉ lưu được 1 giá trị của kiểu dữ liệu trả về ,trên block
được ứng dụng rất nhiều lưu trữ nhiều kiểu giá trị khác nhau!


Cách truyền block vào hàm
Tổng quát:
–(void) tên hàm : (kiểu dữ liệu)tên biến1 : (kiểu dữ liệu)tên biến2 :block
–(void) tên hàm : (kiểu dữ liệu)tên biến1 : (kiểu dữ liệu)tên biến2 : (kiểu trả về block
(^)(kiểu dữ liệu A ,kiểu dữ liệu B)) Tên block;
Ví dụ
----------------------------------------------------------------------------------------------------------------------(void) add:(NSString*)name :(int)age :(void (^)(NSInteger diem,NSString
*monHoc,NSError *error))completion{
completion(3,@"hoa",nil);// truyền tham số cho block
name=@"minh";
age=8;
}
---------------------------------------------------------------------------------------------------------------------khi này các tham số của block lưu lại thông tin truyền vào block.
Thêm đoạn mã sau trong viewDidLoad:
Đây là đoạn code mã nguồn cho block:
---------------------------------------------------------------------------------------------------------------------// ứng dụng block
[self add:@"binh" :22 :^(NSInteger diem, NSString *monHoc, NSError *error) {
NSLog(@"%@,%ld",monHoc,(long)diem);
}];
---------------------------------------------------------------------------------------------------------------------=> Khi đó các tham số block đã lưu lại thông tin! Ta gọi tham số ra và làm việc !!!
Ở đây là một ví dụ đơn giản, trong thực tế ta khai báo các block để lưu lại thông tin các
tham số và dùng các tham số định nghĩa lại block để làm việc với tham số!.
Ví dụ load API truyện về ta cần lưu lại thông tin số cuốn sách, tên sách… định nghĩa block
gồm các thông tin trên. Khi đó đối với từng hàm ta gọi block trên, và định nghĩa nghĩa
block tuỳ mục đích sử dụng với các thông tin block cung cấp.

Link full code : />
VII.

Cấu trúc của một chương trình trong lập trình IOS
Các thành phần cơ bản của một app ios :
–file .h gồm :@interface khai báo : biến , fun ,class ,protocol…
–file .m: @implementation: thực thi
1. Tổng quan:

Page 17 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

FILE: AppDelegate: Mình đã commen các hàm cơ bản trong Appdelegate nội dung các hàm ý
nghĩa như sau:
--------------------------------------------------------------------------------------------------------------------------// bắt đầu chạy khi app gọi
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}// sẽ chạy sau Didview
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for
certain types of temporary interruptions (such as an incoming phone call or SMS message) or
when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES
frame rates. Games should use this method to pause the game.
}
// chạy khi app chạy ở chế độ nền

- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store
enough application state information to restore your application to its current state in case it
is terminated later.
// If your application supports background execution, this method is called instead of
applicationWillTerminate: when the user quits.
}
// chạy khi app sẽ chạy ở chế độ nền
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can
undo many of the changes made on entering the background.
}
// khi app hoàn thành
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive.
If the application was previously in the background, optionally refresh the user interface.
}
---------------------------------------------------------------------------------------------------------------------------FILE :Main.storyboard
Page 18 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Gồm các viewcontroller các màn hình, các cảnh trong app , nơi thiết kế giao diện

-FILE : Assets.xcassets
Chứa icon của ứng dụng
-FILE :ViewController
Class thực thi code. quản lý các màn hình viewcontroller .
-FILE: LaunchScreen

Màn hình khởi động chạy load
-FILE:Info
Thông tin app- cấu hình app
-FILE: Supporting Files
Chứa main app
2.

VIII.

Nguyên lý chạy cơ bản
Main khởi tạo chạy ứng dụng-> thông tin cấu hình app cho phép-> khởi tạo màn hình khởi
động-> gọi đến appdelegate khởi tạo hàm bắt đầu chạy trong app-> sau đó chạy các hàm
thực thi viewcontroller.

Tạo ứng dụng Helloworld sử dụng Objective C (tạo ứng dụng Iphone đầu tiên trên iOS)
Đối với bất kỳ ngôn ngữ nào ta cũng làm quen với hello world, mình cũng giới thiệu cụ thể hello
world trong IOS cơ bản! sử dụng Objective C.
Mục tiêu hiển thị ra thông báo: Helllo World mà bất kỳ ngôn ngữ nào cũng học qua!
1. Khởi tạo một dự án mới

Page 19 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

– Xcode cho bạn thấy mẫu dự án khác nhau để lựa chọn. Đối với ứng dụng đầu tiên của bạn,
chọn “Single Xem Application” và nhấp “Next”.

Product Name : HelloWorld – tên ứng dụng.
Organization Name : – Tên cá nhân hoặc tên công ty.

Organization Identifine : – định danh viết tắc tên công ty hoặc tên cá nhân.
Device : chọn tên thiết bị .

Page 20 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Chọn next-> chọn thư mục lưu->create =>như thế chúng ta đã tạo file thành công.
2.

Bắt đầu viết app “HelloWourld”.
-Vào main.StoryBoard . Lúc đầu màn hình không có gì!

– Kéo “button” vào đổi text “helloWorld”, chọn vào button và chọn vào background chọn
màu sắc!!!…

Page 21 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Chọn vào biểu tượng có 2 cái vòng tròn!

– click vào button , và giữ CTRL kéo sang, đặt tên helloWorld chọn Action,touchUpInside bắt
sự kiện click vào button.

Page 22 of 212



[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

3.

Bắt đầu code nào
Khởi tạo đối tượng helloWorld truyền tham số vào : Tiêu đề, thông báo, delegate, Cancel trở
lại, thông tin hiển thị thêm, OtherButtonTitles.
Trong viewDidLoad
--------------------------------------------------------------------------------------------------------------------------UIAlertView *helloWorld=[[UIAlertView alloc] initWithTitle:@"hello"message:@"helloWorld"
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
// lúc này helloWolrd đã đc tạo để chạy ta gọi hàm "show".
[helloWorld show];
--------------------------------------------------------------------------------------------------------------------------– Biên dịch và chạy thử ta được kết quả như hình sau:

Page 23 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Click vào nút button sẽ đưa ra thông báo:

IX.

Tìm hiểu về Label, Button, TextField, Slider, Switch, Page Control trong iOS

Page 24 of 212


[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]


UI cơ bản của lập trình di động IOS. Label, Button, TextField, Slider, Switch, Page Control cách
khai báo, cách sử dụng, ứng dụng thực tế của các UI trong App.
Sau đây mình sẽ giới thiệu cho các bạn từng UI cụ thể!.
Ta cần tạo dự án mới, đặt tên:

1.

Đầu tiên mình sẽ giới thiệu về Label, Button, TextField trong IOS
Label là gì? label là nhãn chứa thông tin về text, trang trí text, thường dùng để thông báo
thông tin, trang trí màn hình.
Button là gì? button là một nút, sau khi nhấn vào nút đó sẽ thực một số công việc gì đó, đoạn
code nào đó.
TextField là gì? là một ô nhập liệu cho phép nhập dữ liệu từ bạn phím vào ô đó, và cho phép
lấy dữ liệu từ ô để thực hiện các tác vụ khác.
Để cho các bạn dễ hình dung mình sẽ lấy một ví dụ cụ thể sau:
Mình tạo ra 2 ô nhập liệu(TextField) , nhập dữ liệu từ bàn phím, một nút(button) để thực
hiện cộng 2 số nhập từ bàn phím, một label hiển thị kết quả tổng của 2 số.
Thiết kế giao diện đơn giản như sau label đổi text=0, button đổi text=0, và 2 ô text Field.

Ánh xạ UI sang class quản lý: tạo file ViewController.h, Giữ CTRL và kéo lần lượt label, textField để
kiểu Outlet chỉ thuộc tính label và textField và đặt tên:

Page 25 of 212


×