Monday, May 26, 2014

Menambahkan UIView di atas tableView Pada UITableViewController

Langsung saja, hasil akhir yang ingin didapatkan adalah sebuah UIView di atas tableview pada class yang meng-extends UITableViewController, bukan UIViewController. Hasil akhirnya kira-kira seperti gambar berikut ini.

Screen Shot 2014-05-26 at 1.21.29 PM

 

Nah, pada tombol range di atas jika tombol range ditekan maka sebuah UIView yang berisi 4 UIButton akan muncul di atas tableView. Bagaimana caranya? Jika layout anda menggunakan UIViewController maka untuk menampilkan UIView range tersebut tidaklah sulit, namun lain halnya jika anda menggunakan UITableViewController. Anda harus melakukan sedikit trick. Berikut ini caranya.

 

- (void)viewDidLayoutSubviews{
[self drawRangeMenu];
}


kuncinya ada di method viewDidLayoutSubviews seperti di atas.

Snippet selengkapnya seperti ini:


- (void) addRangeMenu{
UIBarButtonItem *rangeBtn = [[UIBarButtonItem alloc] initWithTitle:@"Range" style:UIBarButtonItemStylePlain target:self action:@selector(toggleRangeMenu:)];
self.navigationItem.rightBarButtonItem = rangeBtn;
}

- (void) drawRangeMenu{
rangeMenu = [[UIView alloc] initWithFrame:(CGRect){500,66,100,100}];
[rangeMenu setBackgroundColor:[UIColor whiteColor]];
rangeMenu.layer.shadowOffset = CGSizeMake(-2, 2);
rangeMenu.layer.shadowRadius = 3;
rangeMenu.layer.shadowOpacity = 0.5;

[self.view.superview addSubview:rangeMenu];

UIButton *btn = [[UIButton alloc] initWithFrame:(CGRect){5,5,90,20}];
[btn setTitle:@"1 Month" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[btn addTarget: self
action: @selector(btnOneMonthAction:)
forControlEvents: UIControlEventTouchUpInside];
[rangeMenu addSubview:btn];

btn = [[UIButton alloc] initWithFrame:(CGRect){5,5+22,90,20}];
[btn setTitle:@"6 Month" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[btn addTarget: self
action: @selector(btnSixMonthAction:)
forControlEvents: UIControlEventTouchUpInside];
[rangeMenu addSubview:btn];

btn = [[UIButton alloc] initWithFrame:(CGRect){5,5+22+22,90,20}];
[btn setTitle:@"1 Year" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[btn addTarget: self
action: @selector(btnOneYearAction:)
forControlEvents: UIControlEventTouchUpInside];
[rangeMenu addSubview:btn];

btn = [[UIButton alloc] initWithFrame:(CGRect){5,5+22+22+22,90,20}];
[btn setTitle:@"5 Years" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
btn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
[btn addTarget: self
action: @selector(btnFiveYearAction:)
forControlEvents: UIControlEventTouchUpInside];
[rangeMenu addSubview:btn];
}

-(void) toggleRangeMenu:(id) sender{

if (!isRangeMenuExist) {
rangeMenu.frame = CGRectMake(320,66+5,0,0);
[UIView animateWithDuration:0.25 animations:^{
rangeMenu.frame = CGRectMake(320-105,66+5,100,100);
}];
isRangeMenuExist = YES;
}else{
[UIView animateWithDuration:0.25 animations:^{
rangeMenu.frame = CGRectMake(320, 66+5, 0, 0);
}];
isRangeMenuExist = NO;
}
}

//btn action
- (void) btnOneMonthAction:(id)sender{
_selectedRange = @"1m";

//sembunyikan menu
[UIView animateWithDuration:0.25 animations:^{
rangeMenu.frame = CGRectMake(320, 66+5, 0, 0);
}];
isRangeMenuExist = NO;

[self.tableView reloadData];
}

Tuesday, May 13, 2014

xcode/ios: Mengubah Ukuran UITableView Pada UIViewController

Jika anda membuat layout dengan menggunakan UITableViewController maka tableview anda akan berubah ukuran secara otomatis ketika anda melakukan orientation change (memutar device dari portrait ke landscape atau sebaliknya). Namun jika anda membuat layout dengan parent sebuah UIViewController dan di dalamnya terdapat tableview maka tableview tersebut tidak akan berubah secara otomatis. Untuk mengubah ukurannya anda harus melakukannya secara manual pada method  - (void)viewWillAppear:(BOOL)animated.

Tuesday, May 6, 2014

ios/xcode: membuat pull to refresh scroll ke atas

Pull to refresh, sebagaimana yang lazim adalah user scroll table view ke bawah baru kemudian table view akan direfresh. Namun ada kalanya yang namanya user itu mintanya aneh-aneh dan ngeyelan. Dibilangin lazimnya seperti itu tetap saja tidak mau, maunya table view di scroll ke atas kemudian kalau table view sudah mentok atas akan ter-refresh. Bagaimana membuat seperti itu?

ios pull to refresh scroll up

Monday, May 5, 2014

iOS/xCode: Membuat top text alignment pada UILabel

Defaultnya UILabel pada iOS vertical allignment-nya adalah middle atau di tengah-tengah. Lalu bagaimana caranya supaya text kita berada pada posisi puncak atau top dari UILabel? Untuk horizontal allignment, kita bisa menggunakan method label.textAlignment kemudian tinggal kita set nilainya NSTextAlignmentLeft jika ingin horizontal allignmentnya left atau NSTextAlignmentRight jika ingin kanan, dan NSTextAlignmentCenter jika ingin ditengah. Kemudahan ini tidak akan anda dapatkan jika ingin mensetting vertical alligntment nya. Namun jangan kawatir, pendekatan trik di bawah ini bisa mendapatkan hasil sesuai yang kita inginkan yaitu vertical allignment dari UILabel berada pada puncak atau top.