Friday, June 27, 2014

Aplikasi Jadwal Puasa, Sholat, Imsakiyah Android

Puasa tinggal 1 hari lagi, nanti malam pemerintah akan menggelar sidang isbat untuk menentukan kapan puasanya. Biar nggak ketinggalan waktu buka puasa silahkan install aplikasi android jadwal sholat dan imsakiyah ini (jadwal sholat, puasa, imsakiyah).

jadwal puasa

Jadwal tersedia untuk seluruh kota di Indonesia, dilengkapi juga dengan kalender hijrah-masehi.

jadwal sholat

Wednesday, June 25, 2014

Menentukan ukuran image untuk ldpi,mdpi,hdpi,xhdpi dalam develope android

Android datang dengan banyak sekali variasi ukuran layar. Oleh karena itu untuk memudahkan developer, android sudah membaginya ke dalam beberapa kelompok layar diantaranya ldpi, mdpi, hdpi, xhdpi. Pengelompokan ini dimaksudkan agar aplikasi yang kita buat tampilannya tidak rusak jika di jalankan di beberapa device dengan screen size yang berbeda.

Monday, June 2, 2014

Mengubah Hasil Json NSDictionary ke NSData dan Sebaliknya

Jika anda mengambil data berformat json dari server dengan menggunakan AFNetworking maka otomatis result json anda akan diubah kedalam bentuk NSDictionary. Di satu sisi hal ini memudahkan anda, tetapi anda akan menemui masalah ketika json hasil dari server mengandung value null. seperti di bawah ini misalnya:
{
detail = (
{
account = 9X000101300160;
balance = "1.000.000";
date = "";
price = 0;
secCode = 9999;
type = Blocked;
value = 0;
},
{
account = 9X000101300160;
balance = "1.000.000";
date = "";
price = 0;
secCode = 9999;
type = Available;
value = 0;
}
);
header = {
date = 24092012;
investorID = IDD010239865303;
securityType = Equity;
};
}


Anda akan mendapati error ketika ingin menyimpan hasil json di atas ke NSUserdefaults, karena ada beberapa key yang valuenya adalah "". Errornya kira-kira seperti ini "Attempt to set a non-property-list object"

Untuk mensiasatinya anda bisa mengubahnya ke dalam NSData terlebih dahulu. Menjadi seperti ini:


self.jsonResult = responseObject;

NSData *data = [NSJSONSerialization dataWithJSONObject:self.jsonResult options:kNilOptions error:nil];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"securitiesBalanceJsonResult"];



kemudian untuk memanggilnya anda harus convert dari NSData ke NSDictionary:


NSError* error;
NSDictionary* jsonDB = [NSJSONSerialization
JSONObjectWithData:[defaults objectForKey:@"securitiesBalanceJsonResult"]

options:kNilOptions
error:&error];

NSLog(@"data:%@",jsonDB);

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.