Hatena::ブログ(Diary)

satoru.netの自由帳 このページをアンテナに追加 RSSフィード

160111Monday

swift / modalで開いた画面を閉じる

    @IBAction func closeTapped(){
        self.dismissViewControllerAnimated(true, completion: nil);
    }

160110Sunday

swift / JSON取得&リスト表示&タイトルクリックでURLに飛ぶ

import UIKit
import Alamofire

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    @IBOutlet var table: UITableView!
    var newsDataArray = NSArray();
    func tableView(tableView: UITableView, numberOfRowsInSection section:Int) -> Int{
        return newsDataArray.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)->UITableViewCell{
        let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")
        let newsDic = newsDataArray[indexPath.row] as! NSDictionary
        cell.textLabel?.text = newsDic["title"] as? String
        cell.textLabel?.numberOfLines = 3
        cell.detailTextLabel?.text = newsDic["publishedDate"] as? String
        return cell
    }

    func tableView(tableView: UITableView,didSelectRowAtIndexPath indexPath: NSIndexPath){
        let newsDic = newsDataArray[indexPath.row] as! NSDictionary;
        let newsUrl = newsDic["unescapedUrl"] as! String;
        let url = NSURL(string:newsUrl);
        let app = UIApplication.sharedApplication();
        app.openURL(url!);
    }
    
    override func viewDidLoad() {
        table.dataSource = self;
        table.delegate = self;
        super.viewDidLoad()
        getRSS();
    }

    func getRSS(){
        let requestUrl = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&topic=p&hl=ja&rsz=8";
        Alamofire.request(.GET, requestUrl, parameters: nil).responseJSON {
            response in
            if let json = response.result.value {
                let jsonDic = json as! NSDictionary
                let responseData = jsonDic["responseData"] as! NSDictionary
                self.newsDataArray = responseData["results"] as! NSArray
                self.table.reloadData()
            }
        }
    }

160109Satday

swift / jsonをhttp経由で取得

Download

setting

  • general > embed Binary で[+]で追加。
  • [Alamofile iOS]を選択して追加

code

        let requestUrl = "https://ajax.googleapis.com/ajax/services/search/news?v=1.0&topic=p&hl=ja&rsz=8";

        Alamofire.request(.GET, requestUrl, parameters: nil).responseJSON {
            response in
            if let json = response.result.value {
                print(json)
            }
        }

swift / 任意のsegueに移動

performSegueWithIdentifier("hoge", sender: nil)

swift / social

import Social

...

@IBAction func postTwitter(sender:AnyObject){

let twVC:SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeTwitter)!

twVC.setInitialText("twにつぶやく文章");

twVC.addImage(UIImage(named:"icon.png"));

twVC.addURL(NSURL(string: "http://xxx.com"));

self.presentViewController(twVC, animated: true, completion: nil)

};


@IBAction func postFacebook(sender:AnyObject){

let fbVC:SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)!

fbVC.setInitialText("fbにつぶやく文章")

fbVC.addImage(UIImage(named:"icon.png"));

fbVC.addURL(NSURL(string: "http://xxx.com"));

self.presentViewController(fbVC, animated: true, completion: nil)

};

140213Thuday

UITableViewめも

f:id:satoru_net:20140213021340p:image

Basicly editeble UITable

  • editable
  • add
  • delete

source

ViewController.h
  • <UITableViewDelegate,UITableViewDataSource>を追記してtable関連の関数を処理できるようにする
...

@interface ViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>

...

ViewController.m

#import "ViewController.h"
#import "TACell.h"
#import <QuartzCore/QuartzCore.h>

@interface ViewController (){
    NSMutableArray *items;
}

@property (weak, nonatomic) IBOutlet UITableView *myTableView;
@property (weak, nonatomic) IBOutlet UIButton *plusButton;

@end

@implementation ViewController

- (void)viewDidLoad
{

    [super viewDidLoad];

    //テーブル関連
    items = [NSMutableArray array];
    [items addObject:@"うんこ"];
    [items addObject:@"べんぴ"];
    [items addObject:@"うんこ2"];
    
    _myTableView.delegate = self;
    _myTableView.dataSource = self;
    [_myTableView registerNib:[UINib nibWithNibName:NSStringFromClass([TACell class]) bundle:nil] forCellReuseIdentifier:@"cell"];
    
    //ボタンデザイン関連
    [[_plusButton layer] setBorderColor:[[UIColor blackColor] CGColor]];
    [[_plusButton layer] setBorderWidth:1.0];
    [[_plusButton layer] setCornerRadius:10.0];
    [_plusButton setClipsToBounds:YES];
    
}

//ボタン:編集ボタン
- (IBAction)editButtonClicked:(id)sender {
    if (_myTableView.editing){
        [_myTableView setEditing:NO animated:YES];
    } else {
        [_myTableView setEditing:YES animated:YES];
    }
}

//ボタン:追加ボタン
- (IBAction)addButtonClicked:(id)sender {
    // push    :addIndex = 0;
    // unshift :addIndex = items.count;
    
    int addIndex = 0;
    [items insertObject:@"New!!" atIndex:addIndex];
    
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:addIndex inSection:0];
    NSArray *indexPaths = [NSArray arrayWithObjects:indexPath,nil];
    
    [_myTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationTop];
}


// テーブル関連の処理

//テーブル:ヘッダー
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section{
    return @"データ1    データ2    データ3";
}

//テーブル:セクション数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
//テーブル:行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
    (NSInteger)section {
    return items.count;
}

//テーブル:編集可能か?
-(BOOL)tableView:(UITableView*)tableView canEditRowAtIndexPath:(NSIndexPath*)indexPath
{
    return YES;
}

//テーブル:データ生成
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath{
    
    TACell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    
    if (cell == nil) { // yes
        NSLog(@"null");
    }
    
    cell.titleLabel.text = [NSString stringWithFormat:@"%@", items[indexPath.row]];
    
    NSLog(@"make %d",indexPath.row);
    NSLog(@"%@", items[indexPath.row]);
    
    return cell;
}

// テーブル:削除を押した時の処理
-(void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete){
        // 配列を削除
        [items removeObjectAtIndex:indexPath.row];
        
        // UITableView から削除
        [_myTableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                         withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

参考

http://blogios.stack3.net/archives/674

http://tnakamura.hatenablog.com/entry/2012/10/11/203115

http://tanihiro.hatenablog.com/entry/2013/11/26/210456

http://www.dprog.info/ios/localizations/

140212Wedday

カスタムセルの作り方

UITableview用のcellはカスタマイズができる。

3列のテーブル作成

#import "ViewController.h"
#import "TACell.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    _myTableView.delegate = self;
    _myTableView.dataSource = self;
    [_myTableView registerNib:[UINib nibWithNibName:NSStringFromClass([TACell class]) bundle:nil] forCellReuseIdentifier:@"cell"];
    
}

// テーブル関連の処理

//テーブル:ヘッダー
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section{
    return @"データ1    データ2    データ3";
}

//テーブル:セクション数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
//テーブル:行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
    (NSInteger)section {
    return 10;
}

//テーブル:データ生成
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
    (NSIndexPath *)indexPath{
   
    TACell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    cell.titleLabel.text = [NSString stringWithFormat:@"%@ %i", @"row", indexPath.row];
    return cell;
}

参考

http://tanihiro.hatenablog.com/entry/2013/11/26/210456

©satoru.net
Mail Twitter