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];
}

No comments:

Post a Comment