UITextFieldに余白をつけて良い感じの表示にする【サンプルコード】

iPhone

UITextFieldを使うと、文字が上に、左に寄っていて見た目が悪い。
その場合、左に余白をつけ、文字を縦中央にしたら良い感じに鳴ります。

 UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 30)];
 paddingView.opaque = NO;
 paddingView.backgroundColor = [UIColor clearColor];
 textField.leftView = paddingView;
 textField.leftViewMode = UITextFieldViewModeAlways;
 textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

UITableViewで初期表示の画面位置を指定

iPhone

【使用例】
TableViewControllerを使っていて、
「このページを開いたとき、このページのこの箇所を最初に見せたいんだよね」って時に使います。

【コード】
 int cellHeight = cellの高さ;
 int cellCount = cellの数;
  [self.tableView setContentOffset: CGPointMake( 0, cellHight * cellCount)];

UITableViewCellの高さを可変にする

iPhone

“- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath”に以下を書き込めばよし!
UILabelを追加せずに、uitableviewcellの中のlabelの高さを変化させます

        float cellHeight;
        
        UITableViewCell *cell = [self tableView:tableView
                          cellForRowAtIndexPath:indexPath];
        CGSize size = [cell.textLabel.text sizeWithFont:cell.textLabel.font
                                      constrainedToSize:tableView.frame.size
                                          lineBreakMode:UILineBreakModeWordWrap];
        
        cellHeight = size.height;
        return cellHeight + 15;
       

UITabbarcontroller間での値の受け渡し

iPhone

UITabbarcontrollerを使用していて、表示しているタブから別のタブのRootViewcontrollerへ移動して値を受け渡したいとき。

プログラムで移動する場合

 //遷移先のタブ
 UITabBarController* resultsTab =
  (UITabBarController*)[[self.tabBarController viewControllers] objectAtIndex:2];
 
 //遷移先のrootViewController
 UIViewController* resultVC = [[resultsTab viewControllers] objectAtIndex:0];
 resultVC.string = @"受け渡したい文字列";
 
 //遷移先へ移動
 [self.tabBarController setSelectedViewController: resultsTab];

これで、タブ移動での遷移先に値を受け渡すことができます!!!

UIBarButtonItemの戻るボタンを画像にしたりカスタマイズする方法

iPhone

UINavigationControllerを使っていて、戻るボタンをカスタマイズしたいときがあります。
例えば、

  • ボタンを画像にしたい
  • サイズを変えたい

などです。

今回はそんな凝り性な方のために、ボタンのカスタマイズの方法を記載します。
AppDelegate.mとか全画面で継承してるUINavigationControllerのサブクラスに以下のコードを書きましょう。

 UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle: @" " style:UIBarButtonItemStylePlain target:nil action:nil];
 [self.navigationItem setBackBarButtonItem:backButton];
    
 UIImage *backImg = [[UIImage imageNamed:@"back.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 10)];
 [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backImg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

まず、何も文字を表示しないUIBarButtonItemをつくります。
これをつくらなかったり文字を表示するボタンを作ってしまうと、ボタンの中に「戻る戻る戻る」というような、文字が連続して表示されてしまいます。

次に、UIImageをつくります。
このとき、UIEdgeInsertsMakeという関数が出てきましたね!
こいつは、マージンをつくってくれます!
html、cssのマージンみたいなものです。
本来は、以下のように使用します。

 UIEdgeInsets insets = UIEdgeInsetsMake( 5.0f, 10.0f, 15.0f, 20.0f);
 CGRect aRect  = UIEdgeInsetsInsetRect( bView.frame, insets);
 aView.frame = aRect;

UIEdgeInsetsはマージンの構造体です。

 typedef struct UIEdgeInsets {
    CGFloat top, left, bottom, right;
 } UIEdgeInsets;

また、他のオブジェクトを基準にしてマージンを設定する場合に、基準とするオブジェクトを引数にします。
上の例の場合は、bViewを基準にして上に5、左に10、下に15、右に20のマージンのあるaViewを作ります。
bViewの中に、上記マージンを持つaViewがあるというイメージです。
わかりづらい方は以下のサイトで画像を見てください。
http://runlooprun.wordpress.com/2011/02/20/uiedgeinsets/

で、本題に戻りまして、今回の戻るボタンの場合では、

 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 10)];

ということで、戻る画像の右に10の余白がある状態です。
これで、画像のサイズを調整できます。
戻るボタンの画像デザインを、通常の戻るボタンのように左側を「くの字」にしてる方は、
画像のサイズを伸ばすということは、左の「くの字」部分が伸びてしまうのではないかと懸念するでしょう。
しかし画像の左側13px、右側6pxは固定表示なのです。
そのため「くの字」部分は左側13px以内なので、伸ばされてへんな表示になることはありません。

これで完成です!
より詳しい方法は以下より見てください。
http://www.appcoda.com/customize-navigation-bar-back-butto/