スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


このエントリーをはてなブックマークに追加

iPhoneアプリについての記事の今後。

こんばんは、主夫ひろしです。

iPhoneアプリ開発に関する記事を別のブログに記載することにしました。

引越し先リンク

あちらは無料ブログを利用していないため、広告が表示されません。
今後ともよろしくお願いいたします。

このエントリーをはてなブックマークに追加
スポンサーサイト

Swiftでのエラー解決法 Type ‘ViewController’ does not conform to protocol ‘UITableViewDataSource’

こんにちは、主夫ひろしです。
今回はSwiftのUITableViewについて。


ViewControllerにUITableViewのお決まりUITableViewDelegate, UITableViewDataSourceを追加すると、
Type ‘ViewController’ does not conform to protocol ‘UITableViewDataSource’
とか言われる。


import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}


}



これは必要なメソッドが書かれていないよというエラーでした。下記のメソッドを追加すれば解決。



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")

return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}



コード全体

import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}



func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "Cell")

return cell
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}


}


iPhoneアプリ「Todoリスト-優先度で簡単仕分け」共有機能も充実。(Twitter,Facebook,LINE,メール)

こんにちは、主夫ひろしです。
シンプルな「ToDoListアプリ」をリリースしました。(iPhoneアプリ)

Todoリスト-優先度で簡単仕分け
カテゴリ: 仕事効率化, ビジネス
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa




このToDoリストはシンプルかつ快適操作をテーマに作成しました。
とにかく余計な機能をつけないことで操作がわかりやすい。シンプルだけど、必要な機能は搭載されているといったところでしょうか。

ToDoリスト完成形
ToDoリストを作成すると最終的に上のようなリストが完成します。完了した項目(タスク)はタップして取り消し線をつけていきます。完全に削除したい場合は左に指をグイッと移動(スワイプ)させます。

タスク入力画面
ToDo項目(タスク)の入力画面です。別画面に移動することもなく、ToDoリストが半透明で見えるようになっているため、ToDo項目を確認しながらサクサク入力することができます。優先度もワンタッチ(タップ)で選択できます。

ToDoリストってなかなか続かないものだと思います。そのひとつの要因として面倒だからというのがあげられます。僕はどうやら面倒なことが嫌いなようで、その面倒な作業を極力排除した作りにしました。

優先度を並び替え可能
編集ボタンを押した時の状態です。左のマイナスマークを押せば削除することができるし、右の三本線を触れば項目の並び替えを行うことができます。なので、項目を入力した際に優先度を適当につけてても、あとから並び替えれば良いので、入力するときに適当に項目を作っても平気です。

ツイッター、フェイスブック、メール、Mail、LINE、ラインと共有できる。
共有機能も充実しており、メール、Twitter、Facebook、LINEで共有することができます。上司や部下などの同僚にToDo項目を送りたい時などに便利だと思います。また自分のメモ用としても保存できるのも吉。

sc40-5.png

ゴミ箱ボタンを押して全項目を一括削除することもできます。ひとつひとつ削除するのは面倒なものです。


いかがでしょう?作成した僕が言うのもなんですが、とても有益なアプリが完成したと思っています。
日々の生活にToDoリストを取り入れてみてはいかがでしょうか。きっとより効果的な1日を過ごすことができると思いますよ!よければレビュー(評価)もしてくださいね♪

Todoリスト-優先度で簡単仕分け
カテゴリ: 仕事効率化, ビジネス
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa





ランキング参加しています。
↓ポチっと協力していただけると励みになります。


にほんブログ村 ライフスタイルブログへ


このエントリーをはてなブックマークに追加

Xcode6 Swift でプロジェクト作成したらiOS7.1のデバイスは使えないとか言われた。

こんにちは、主夫ひろしです。

Xcode6 でSwiftの勉強始めました。
作ったアプリはiOS7に対応しないといけないよなーと思って、とりあえずiPhone5(7.1)でRunしたところ。

"iPhone 5 is not available."

とか言われる。えーwもしかしてSwiftはiOS8しか動かないの??と思ってGoogle先生に尋ねる。
なんか情報あまりでてこないぞ。どうやらiOS7で普通に動いているようだ。

まいった。としばらく探していると、解決策を載せてくれてる記事が。
Xcode 6.1入れたらiOSシミュレータがiPhone 5sとiPad Airのみになって、しかも動かなくて (゜д゜)ポカーン となってる人に捧ぐ記事。

僕の場合は、Xcode→Preferences→DownloadsのComponentsでiOS7.1 Simulatorがダウンロードされてませんでした。お恥ずかしい。。。

iOS7.1 Simulatorにチェックマーク(✔︎)がついたら無事シミュレータが動くようになりました。めでたし。



ランキング参加しています。
↓ポチっと協力していただけると励みになります。


にほんブログ村 ライフスタイルブログへ


このエントリーをはてなブックマークに追加

Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方(お気に入り ブックマーク編)

こんにちは、主夫ひろしです。
今回はブックマーク機能について。

過去記事は以下。
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方①
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方②
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方③
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方④
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方(ランキング編)①
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方(ランキング編)②
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方(検索編)①
Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方(検索編)②


ブックマーク機能は過去記事に記載した新着順、ランキング順、検索に比べて比較的容易に実装できます。PHPファイルはランキングを実装した時点で存在するので、Xcode上の処理を実装すればできます。実は今までのファイルでもブックマーク登録をNSUserDefaultsを使って実装しています。その情報取り出して表示してあとはXMLファイルにアクセスすればいいという原理です。では、サンプルコード。

BookmarkTableViewController.h
-------------------------------------------------------------------

#import <UIKit/UIKit.h>

@interface BookmarkTableViewController : UITableViewController
- (IBAction)refrechTitle:(id)sender;

@end

BookmarkTableViewController.m
-------------------------------------------------------------------
#import "BookmarkTableViewController.h"
#import "DetailBookmarkViewController.h"
#import "SmartCell.h"

@interface BookmarkTableViewController ()

@end

@implementation BookmarkTableViewController{
// タグ内の要素を格納する配列
NSMutableArray* titleArray;
NSMutableArray* blog_titleArray;
NSMutableArray* dateArray;
NSMutableArray* linkArray;

// 要素を出力するテキスト
NSString* titleText;
NSString* blog_titleText;
NSString* dateText;
NSString* linkText;
}

- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];

// 編集ボタンを追加
self.navigationItem.rightBarButtonItem = self.editButtonItem;
self.navigationItem.rightBarButtonItem.title = @"編集";
self.navigationItem.rightBarButtonItem.tintColor = [UIColor grayColor];

self.tableView.separatorColor = [UIColor yellowColor];
self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0 green:0.89 blue:0.7 alpha:1];
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor grayColor]};
self.tableView.rowHeight = 60;

// NSUserDefaultsのインスタンスを2つ生成。
NSUserDefaults* defaultsB = [NSUserDefaults standardUserDefaults];
// ブックマーク削除
// [defaultsB removeObjectForKey:@"keyBookMark"];


// タイトル配列を準備
titleArray = [NSMutableArray array];
blog_titleArray = [NSMutableArray array];
dateArray = [NSMutableArray array];
linkArray = [NSMutableArray array];

// 他の画面でブックマーク登録されたブログデータを取得
NSData* d = [defaultsB dataForKey:@"keyBookMark"];
if (d)
{
NSLog(@"データあるよ。");
NSMutableArray *Array = [NSKeyedUnarchiver unarchiveObjectWithData:d];
if (Array) {
for (int i = 0; i < Array.count / 4; i++) {

[titleArray addObject:Array[i * 4 + 0]];
[blog_titleArray addObject:Array[i * 4 + 1]];
[dateArray addObject:Array[i * 4 + 2]];
[linkArray addObject:Array[i * 4 + 3]];
}
}


}else{
NSLog(@"データがないよ。");
}

self.title = @"お気に入り";

// カスタムセル設定
[self.tableView registerNib:[UINib nibWithNibName:@"SmartCell" bundle:nil] forCellReuseIdentifier:@"Cell"];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)insertNewObject:(id)sender
{
if (!titleArray) {
titleArray = [[NSMutableArray alloc] init];
}
[titleArray insertObject:[NSDate date] atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

// セルの削除を行えるようにする。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// 削除ボタンが押された行のデータを配列から削除します。
[titleArray removeObjectAtIndex:indexPath.row];
[blog_titleArray removeObjectAtIndex:indexPath.row];
[dateArray removeObjectAtIndex:indexPath.row];
[linkArray removeObjectAtIndex:indexPath.row];

// ブックマークを呼び出す。
// ブックマークに格納するための配列を準備
NSMutableArray* bookmarkInfo_b = [NSMutableArray array];
// NSUserDefaultsのインスタンスを生成。
NSUserDefaults* defaultsB2 = [NSUserDefaults standardUserDefaults];

// ブックマーク登録されたブログデータを取得
NSData* d = [defaultsB2 dataForKey:@"keyBookMark"];

NSMutableArray *Array = [NSKeyedUnarchiver unarchiveObjectWithData:d];
bookmarkInfo_b = [NSMutableArray arrayWithArray:Array];
if (bookmarkInfo_b) {
NSLog(@"データ取得まではできている。");
// NSLog(@"%ld",(long)indexPath.row);
NSLog(@"データの中身は%@",bookmarkInfo_b[indexPath.row * 4]);

for (int i = 0; i < 4; i++) {
[bookmarkInfo_b removeObjectAtIndex:indexPath.row * 4];
}

// ブックマークに書き込む
NSUserDefaults* defaultsB = [NSUserDefaults standardUserDefaults];



NSData* dataB = [NSKeyedArchiver archivedDataWithRootObject:bookmarkInfo_b];



[defaultsB setObject:dataB forKey:@"keyBookMark"];


BOOL successful = [defaultsB synchronize];
if (successful) {
NSLog(@"削除を反映したデータの保存成功!");
}

}

[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// ここは空のままでOKです。
}
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return titleArray.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

NSString* cellIdentifier = @"Cell";
SmartCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[SmartCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

NSData* data = titleArray[indexPath.row];
cell.titleLabel.text = [data description];
cell.titleLabel.font = [UIFont boldSystemFontOfSize:15];
cell.titleLabel.textColor = [UIColor brownColor];

cell.dateLabel.text = dateArray[indexPath.row];
cell.dateLabel.font = [UIFont systemFontOfSize:8];
cell.dateLabel.textColor = [UIColor greenColor];

cell.blog_titleLabel.text = blog_titleArray[indexPath.row];
cell.blog_titleLabel.font = [UIFont systemFontOfSize:8];
cell.blog_titleLabel.textColor = [UIColor redColor];


// セルにブックマークボタンをつける。
UIImage* buttonImage = [UIImage imageNamed:@"bookmarkButton.png"];
[cell.button setTag:indexPath.row];
[cell.button setTitle:@"" forState:UIControlStateNormal];
[cell.button setBackgroundImage:buttonImage forState:UIControlStateNormal];
[cell.button.titleLabel setFont:[UIFont systemFontOfSize:10]];

return cell;
}

// cellがタップされた時のアクションを表すメソッド ランキングに反映。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
for (int i = 0; i < titleArray.count; i++) {
if (indexPath.row == i) {
// URL指定
NSURL *url = [NSURL URLWithString:@“XMLを生成するPHPファイル”];
NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
// POST指定
req.HTTPMethod = @"POST";
// BODYに登録、設定
NSString *body = [NSString stringWithFormat:@"a=%@&b=%@", titleArray[i], linkArray[i]];
req.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];

CGRect rc = [[UIScreen mainScreen] applicationFrame];
UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake( 0, 0, rc.size.width, rc.size.height )];
// リクエスト送信
[web loadRequest:req];
// 画面に表示
[self.view addSubview:web];
web.alpha = 0;


NSLog(@"%@", titleArray[i]);
}
}
// カスタムセルを利用した場合セグエ設定はここでする。
[self performSegueWithIdentifier:@"showDetail" sender:self.tableView];
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}

// セグエ遷移する前の準備
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"showDetail"]) {
// rowの中身を選択されたrowに設定
NSIndexPath* indexPath = [self.tableView indexPathForSelectedRow];

// 選択されたリンク先を変数rowの中身にセット
NSString* link = linkArray[indexPath.row];
[[segue destinationViewController] setDetailItem:link];
}
}

- (IBAction)refrechTitle:(id)sender {
// テーブルを再読み込み
[self.tableView reloadData];
}
@end




はてはて、どうもごちゃごちゃしたコードだなぁと思いながら書きましたが、いかがだったでしょうか。
以上で、Objective-CでRSS機能を使った『まとめサイトアプリ』の作り方の解説を終わります。

ひとつだけおことわりを。僕が作ったコードは決して完全ではないし、ミスもあると思います。そこは温かい目で見守ってください。

みなさまの少しでもお役に立てれば幸いです。
長文読んでいただきありがとうございました。



ランキング参加しています。
↓ポチっと協力していただけると励みになります。


にほんブログ村 ライフスタイルブログへ


このエントリーをはてなブックマークに追加
博多でオススメのお店
プロフィール

ぽてぴ×ひろし

Author:ぽてぴ×ひろし
訪問ありがとうございます。
しゅふ友2人(主婦&主夫)で始めたブログです。
日々の出来事、つぶやき、お役立ち情報などなど書いていこうと思ってます。

ブログを書いてる人
その①主婦ぽてぴ
 主婦歴:8年
 家族:旦那クンと猫2匹
 得意技:怪しい創作料理
     家事手抜き技の探求
 趣味:アンチエイジング奮闘

その②主夫ひろし
 主婦歴:1か月
 家族:嫁サンと2人暮らし
 得意技:けさ固め、体落とし
 趣味:焼酎を飲みながらプリン
    体と奮闘中

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
楽天
オススメサイト
ブログランキング
↓ポチッ!お願いします♪
iPhoneアプリ
はかたべんももたろう
カテゴリ: 教育, エンターテインメント
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa

Horror Surprised !! 〜どきどきホラー!
カテゴリ: エンターテインメント, ライフスタイル
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa
計画タイマーまねじめん
カテゴリ: ライフスタイル, フード/ドリンク
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa
5文字に思いを込めろ!
カテゴリ: エンターテインメント, ライフスタイル
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa
TOEIC攻略タイマー
カテゴリ: 教育, ビジネス
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa
お買い物べんり電卓〜直感で簡単操作〜
カテゴリ: ライフスタイル, フード/ドリンク
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa


動画:お買い物べんり電卓〜直感で簡単操作〜

脳トレとぅんとぅん
カテゴリ: ゲーム, 教育, 教育, スポーツ
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa


円スケジュール-1日を素早く計画
カテゴリ: ライフスタイル, 仕事効率化
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa


にこにこサッカー
カテゴリ: ゲーム, エンターテインメント, アクション, スポーツ
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa


Todoリスト-優先度で簡単仕分け
カテゴリ: 仕事効率化, ビジネス
価格: 無料 (掲載時)
販売元: Hiroshi Nakagawa


Twitter
食品&飲料
RSSリンクの表示
電子書籍
amazon
ヘルス&ビューティー
リンク
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。