Siêu tổng hợp iOS code snippets – Objective C

Siêu tổng hợp iOS code snippets – Objective C
5 (100%) 1 Hài lòng

Khung sườn của bài viết này.

Đặc tính thông minh của Xcode 10

So với Android Studio thì xcode luôn xách dép, nhưng không hiểu sao với cái ide ghẻ này mà kiếm cho Apple hàng tỷ đô hihi

Mới ra bản beta nhưng mình thấy xcode 10 cải thiện khá thông minh, lần trước mình có phản hồi việc không folding được block code thế là team phát triển của Apple đã cải thiện nó (nói thật đấy). Sau đây là vài tính năng mình cảm nhận được:

  • Cho phép folding block code như vòng lặp for hay kiểm tra rẽ nhánh if.
  • Source Control thông minh hơn, cho phép discard 1 đoạn nhỏ mà không cần Source Tree hihi.

Chưa quen:

  • cái quản lý đối tượng để dùng trong Main Storyboard đã tách riêng ra, không còn nằm bên phải bên dưới nữa.

Bản này chỉ có Dark mode khi cài trên Mac Mojave trở đi

Chụp màn hình iPhone trong Obj-C

Nhớ thêm Privacy trong Info.plist

 

Hẹn giờ chạy 1 hàm Obj-c

Hiển thị ảnh với border và radius border

Thêm gạch chân cho UIlabel

 

Tạo button bằng code objc

Tạo ảnh bằng code obj

Hiển thị màu với mã Hex

cách dùng:

Lấy chiều rộng và cao màn hình iPhone, iPad

Lấy chiều cáo status bar của iPhone, iPad

 

Thêm ảnh vào dự án ios

Click chuột phải vào nơi bạn muốn thêm -> chọn Add files to… là ok.

* Chú ý:

[email protected]~iphone.png: định dạng này thì chỉ có iphone hiển thị

[email protected]~ipad.png: định dạng này thì chỉ có ipad hiển thị

Cái 2x, 3x hay không có 2x, 3x như thế này bluetooth_off~ipad.png đằng sau là ipad nó sẽ tự nhận ra có retina hay không.

2x là 2 lần ảnh gốc.
3x là 3 lần ảnh gốc.

Underline 1 label

 

Cách dùng Notification để thông báo

Cách này để kích hoạt 1 hàm nào đó, hay thông báo cho ViewController khác biết task đã xong.

Phát đi:

Bên nhận:

Luôn nghe ngóng:

Tạo hàm sẽ chạy:

* Chú ý:

Nghe ngóng tại:

Không theo dõi nữa tai:

 

Xoá bỏ các đường phân cách trong Tableview ios

Chỉ cần thêm

Vào hàm ViewDidLoad là ok.

Tham khảo:

https://stackoverflow.com/questions/1369831/eliminate-extra-separators-below-uitableview

 

Cách cài Cocoa Pod cho dự án

1 Đầu tiên cần cài cocoa pod cho hệ điều hành

2 Vào thư mục của proj

3 Khởi tạo file mới tên là Podfile

4 Vào thư mục project và mở ra, thay thế nội dung này vào file Podfile hoặc bất kỳ thư viện nào.

5 Và cuối cùng thực hiện chạy file Podfile

Mỗi lần thêm 1 thư viện vào Podfile thì cần chạy lại pod install

Khi làm việc với NavigationController

  • Biến vẫn sống khi chuyển sang ViewController mới.

Bật tắt nút BACK  trên Navigation

 

Lưu ý khi dùng Enum

Các biến tự tăng tutang1, tutang2, tutang3 sẽ có giá trị lần lượt là 1, 2, 3

Trường hợp gán lưng chừng

 

Hiển thị và ẩn popup trong iOS

Tạo background dạng trong suốt full màn hình

Ẩn popup view và phần trong suốt đi

 

Assigning to ‘NSMutableArray *__strong’ from incompatible

type ‘void’

Lỗi này là do remove phần tử trong NSMutableArray mà nhận dữ liệu về, ko cần phải nhận về mà sau khi remove thì cái mảng chính nó tự remove vì vậy việc gán vào đâu là ko cần thiết.

Khi log debug

unsigned char Khi log thì để là %u là ok

unsigned long Khi log thì để là %lu là ok

Hiển thị dữ liệu bằng tableview cần lưu ý

  • File xib đã được kết nối tới file ViewController nào chưa?
  • Đã sửa tên đúng cho file header và file implement chưa?
  • Đã có mảng dữ liệu chưa?
  • Đã dùng phương thức có tham số numberOfRowsInSection trong delegate chưa?
  • Đã dùng phương thức có tham số cellForRowAtIndexPath trong delegate chưa?
  • Đã tạo ra layout cho từng cell chưa? CustomTableViewCell *cell = [[CustomTableViewCell alloc] initFromXib];

Tham khảo vài trường hợp khác liên quan đến tableview

https://iosprogrammingknowledge.blogspot.jp/2016/06/thu-tu-goi-cac-method-delegate-trong_84.html

https://iosprogrammingknowledge.blogspot.jp/2016/06/trong-table-view-co-cac-cap-reload-nao.html?view=magazine

Khi click vào các phụ kiện bên phải của cell TbView

Khi dùng phụ kiện thông tin UITableViewCellAccessoryDetailDisclosureButton

 

Khi làm việc với tableview cần chú ý

Nếu dùng tableview để cho người dùng chọn và gửi lên server hay các thiết bị ngoại vi thông quan bluetooth thì cần chú ý đến dữ liệu hiển thị và dữ liệu gửi đi là gì?
Khi làm việc hay QA với khách hàng có cái để hỏi mà estimate công cho hợp lý.

Quy tắc viết hàm trong obj-c

Mọi tham số phải đặt sau dấu 2 chấm : như thế này:

  • (void)someMethod:(int)i; // có một đối số
  • (void)someMethod:(int)i withString:(NSString *)string; // có 2 đối số. đối số thứ nhất kiểu nguyên + có 1 joining arg + đối số thứ 2 kiểu string
  • (void)someMethod:(int)i :(int)i2 :(int)i3; // có 3 đối số kiểu nguyên nhưng ko đối số nào có join arg. ko nên làm thế này.

  • Nếu + là static và – là hàm thành viên, không phải hàm class

  • cứ có dấu * là con trỏ trỏ đến 1 đối tượng như NSString,…
  • Cứ liên quan đến string là dùng @

OOP trong obj-c
– Phân biệt biến thể hiện và thuộc tính. Biên khai báo trong {} của header còn thuộc tính bắt đầu với property
– Khai báo class bằng cách định nghĩa nguyên mẫu trong file .h sau đó định nghĩa thực sự 1 class trong gile .m
– với thuốc tính thì cần có từ khóa property để nói rằng thuốc tính của tao sẽ tự tạo getter và setter (bên định nghĩa .m cần chỉ rõ thuộc tính synthesize còn ko nó sẽ tạo tự động cho mình 1 cái thuốc tính là _tênthuoctinh dùng cái này thay vì tên thuốc tinh nguyên mẫu)
– gọi lấy giá trị thuộc tính bằng tên getter là chính tên nguyên mẫu hoặc _tenthuoctinh
– gọi set giá trị cho thuộc tính bằng setTenThuocTinh cái chứ set tự thêm vào bất ký thuốc tính nào.
– “+” trước hàm là static gọi thông qua tên Class
– Để tạo hàm tạo thì dùng từ khoá -(íntancetype) tên_mong_muốn

Điểm vào của ứng dụng

  • vào hàm main trong file main.m
  • vào didFinishLaunchingWithOptions trong AppDelegate.m
  • Sau đó vào viewDidLoad của ViewController mà nó đến

Vòng đời app (trong appdelegate) và và vòng đời view

controller

OPEN APP
application khoi dong app
loadView 0
viewDidLoad 1
viewWillAppear 2
viewWillLayoutSubviews 2.1
viewDidLayoutSubviews 2.2
viewDidAppear 3
applicationDidBecomeActive 5

ẤN HOME
applicationWillResignActive 2
applicationDidEnterBackground 3

Mở lại app
applicationWillEnterForeground 4
applicationDidBecomeActive 5

Sang VIEW CONTROLLER khác
viewWillDisappear 4
viewDidDisappear 5

Trở lại VIEW CONTROLLER
loadView 0
viewDidLoad 1
viewWillAppear 2
viewWillLayoutSubviews 2.1
viewDidLayoutSubviews 2.2
viewWillLayoutSubviews 2.1
viewDidLayoutSubviews 2.2
viewDidAppear 3

NHÁY ĐUP HOME VÀ CHỌN LẠI
applicationWillResignActive 2
applicationDidBecomeActive 5

NHÁY ĐUP HOME VÀ CHỌN APP KHÁC
applicationWillResignActive 2
applicationDidEnterBackground 3

KILL APP
applicationDidEnterBackground
applicationWillTerminate 6

Ngoài ra:

Nếu muốn chạy các sự kiện trong app delegate thì cần tạo đối tượng View Controller muốn chạy trong App Delegate sau đó gọi trong các sự kiện cảu App Delegate.

Các dấu trong Obj-C

https://content.pivotal.io/blog/rails-to-ios-what-the-are-these-symbols-in-my-code

Tại sao chúng ta nên dùng Interface Builder (XIB) thay vì Storyboard?
https://techmaster.vn/posts/34247/tai-sao-chung-ta-nen-dung-interface-builder-xib-thay-vi-storyboard

https://techmaster.vn/posts/34348/ban-chat-cua-delegate-va-data-source-trong-swift

https://techmaster.vn/posts/34191/1482475322195

https://techmaster.vn/posts/34190/cau-hoi-tuyen-dung-pho-bien-cho-junior-ios-developer-phan-1

https://techmaster.vn/posts/359

Các khái niệm về từ khoá
https://www.ios-blog.co.uk/tutorials/objective-c/variable-property-attributes-or-modifiers/

Thứ Tự Gọi Các Method Delegate Trong UITableView Khi Gọi

Reload

Đầu tiên call đến:
– (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

để kiểm tra xem số lượng các section trong table view là bao nhiêu

Sau đó call đến:
– (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

Rồi call đến:
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Sau đó call đến một số phương thức khác nếu có

Gặp trường hợp:

ko thấy gọi đến method cellForRowAtIndexPath: khi table view gọi reload, các bạn cần chú ý:

1. table view có bị nil không?
2. table view có frame chuẩn ko?
3. table view đã được set tableview.datasource và tableview.delegate chưa?
4. numberOfSectionsInTableView có = 0 không?
5. Chiều cao của các row
6. rồi mới tới cellForRowAtIndexPath

Reference:

https://iosprogrammingknowledge.blogspot.jp/2016/06/thu-tu-goi-cac-method-delegate-trong_84.html?view=magazine

http://iphonedevsdk.com/forum/iphone-sdk-development/18342-tableview-reloaddata-method-doesnt-call-cellforrowatindexpath.html

 

Tạo icon loading cho iOS (UIActivityIndicatorView)

Định nghĩa:

Để đảm bảo rằng icon này nằm ở giữa màn hình cần phải khởi tạo khi các view đã sẵn sàng, do đó gọi trong hàm này:

 

Để dừng icon này gọi:

Rất đơn giản khi đã biết rồi.

Đếm ký tự online

Cái này đếm luôn cả khoảng trắng

https://mothereff.in/byte-counter

Khai báo mảng ký tự 30 phần tử

char str[30] = “123456789”;

printf(“%s\n”, str+1); // in từ phần tử thứ 1

Lưu ý với memset và memcpy

void* memset(void* dest, int value, std::size_t count);
set ở đây nghĩa là ghi đè lên cái string dest, count ký tự bằng giá trị value

void* memcpy(void* dest, const void* src, std::size_t count);
copy số count ký tự (cả phần null) của src vào dest. strcpy thì ko copy null vậy nên cần chú ý.

 

Cách dùng nsuserdefault

Khởi tạo và lưu:

int maxLenght = 100;
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; // khởi tạo
[userDefault setInteger:maxLenght forKey:@”maxLenghtKey”]; // gán
[ud synchronize];// lưu

Lấy ra:

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
int maxLengthOfText = [[userDefault objectForKey:@”maxLenghtKey”] intValue];

Xoá đi:

[userDefault removeObjectForKey:@”maxLenghtKey”];

Kiểm tra xem 1 sub view có trong view chính hay không

Ẩn hiện bàn phím

UITextView does not have any methods which will be called when the user hits the return key. If you want the user to be able to add only one line of text, use a UITextField. Hitting the return and hiding the keyboard for a UITextView does not follow the interface guidelines.

Even then if you want to do this, implement the textView:shouldChangeTextInRange:replacementText: method of UITextViewDelegate and in that check if the replacement text is \n, hide the keyboard.

There might be other ways but I am not aware of any.

https://stackoverflow.com/questions/703754/how-to-dismiss-keyboard-for-uitextview-with-return-key

Khi làm việc với F8 Controller cần chú ý

  • SD card phải định dạng FAT32 nó mới nhận
  • Nâng cấp firmware cho máy F8 thì nhấn PLAY và NGUỒN
  • Sau khi factory reset thì cần phải cái lại bluetooth Add-on cho nó bằng cách lên trang chủ download về và cho vào thẻ nhớ. Tắt máy và nhấn đồng thời MENU và nút NGUỒN

Khi muốn hiển thị 1 VC trong Main Storyboard

Để cái này trong app delegate là ok.

VIệc còn lại là sửa trong Main.storyboard cho khớp với View controller storyboard ID

Tham khảo thêm https://stackoverflow.com/questions/41407841/navigation-controller-showing-black-screen

Các bài viết không xem thì tiếc:

Chia sẻ là sexy

Đô Trịnh

Một lập trình viên vui vẻ, hòa đồng, luôn sống tích cực và anh ấy quay tay khỏe và khéo trong môn bi lắc :) Xem thêm thông tin tại trang -> Giới thiệu