亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

IOS開發基礎知識--碎片15

2019-11-14 18:51:53
字體:
來源:轉載
供稿:網友

1:將自定義對象轉化成NsData存入數據庫

要轉為nsdata自定義對象要遵循<NSCoding>的協議,然后實現encodeWithCoder,initwithcode對屬性轉化,實例如下:HMShop.h#import <Foundation/Foundation.h>@interface HMShop : NSObject <NSCoding>@PRoperty (nonatomic, copy) NSString *name;@property (nonatomic, assign) double  price;@endHMShop.m#import "HMShop.h"@implementation HMShop- (void)encodeWithCoder:(NSCoder *)encoder{    [encoder encodeObject:self.name forKey:@"name"];    [encoder encodeDouble:self.price forKey:@"price"];}- (id)initWithCoder:(NSCoder *)decoder{    if (self = [super init]) {        self.name = [decoder decodeObjectForKey:@"name"];        self.price = [decoder decodeDoubleForKey:@"price"];    }    return self;}- (NSString *)description{    return [NSString stringWithFormat:@"%@ <-> %f", self.name, self.price];}@end操作:- (void)addShops{    NSMutableArray *shops = [NSMutableArray array];    for (int i = 0; i<100; i++) {        HMShop *shop = [[HMShop alloc] init];        shop.name = [NSString stringWithFormat:@"商品--%d", i];        shop.price = arc4random() % 10000;                NSData *data = [NSKeyedArchiver archivedDataWithRootObject:shop];        [self.db executeUpdateWithFormat:@"INSERT INTO t_shop(shop) VALUES (%@);", data];    }}- (void)readShops{    FMResultSet *set = [self.db executeQuery:@"SELECT * FROM t_shop LIMIT 10,10;"];    while (set.next) {        NSData *data = [set objectForColumnName:@"shop"];        HMShop *shop = [NSKeyedUnarchiver unarchiveObjectWithData:data];        NSLog(@"%@", shop);    }}*把對象轉成nsdata的理由,因為在存入數據庫時會變成字符串,不利轉化,所以先把其序列化轉化成nsdata,然后存進數據庫,取出時同樣先為nsdata再轉化;

2:增加子控制器,用來提取一些公共的內容布局,瘦身當前viewcontroller

DetailsViewController *details = [[DetailsViewController alloc] init];    details.photo = self.photo;    details.delegate = self;    [self addChildViewController:details];     CGRect frame = self.view.bounds;    frame.origin.y = 110;    details.view.frame = frame;    [self.view addSubview:details.view];    [details didMoveToParentViewController:self];

3:用協議來分離出調用

在子控制器創建一個協議,然后在其內部對它進行處理傳參子控制器.h@protocol DetailsViewControllerDelegate- (void)didSelectPhotoAttributeWithKey:(NSString *)key;@end@interface DetailsViewController : UITableViewController@property (nonatomic, strong) Photo *photo;@property (nonatomic, weak) id <DetailsViewControllerDelegate> delegate;@end子控制器.m- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    NSString *key = self.keys[(NSUInteger) indexPath.row];    //對它進行傳參,讓其在父控制器去實現    [self.delegate didSelectPhotoAttributeWithKey:key]; }父控制器.m@interface PhotoViewController () <DetailsViewControllerDelegate>@end然后(得到參數,進行原本子控制器要進行的操作):- (void)didSelectPhotoAttributeWithKey:(NSString *)key{    DetailViewController *detailViewController = [[DetailViewController alloc] init];    detailViewController.key = key;    [self.navigationController pushViewController:detailViewController animated:YES];}

4:關于kvo的運用

//進度值改變 增加kvo 傳值 key為fractionCompleted- (void)setProgress:(NSProgress *)progress{    if (_progress) {        [_progress removeObserver:self forKeyPath:@"fractionCompleted"];    }    _progress = progress;    if (_progress) {        [_progress addObserver:self forKeyPath:@"fractionCompleted" options:NSKeyValueObservingOptionNew context:nil];    }}//消息kvo消息- (void)dealloc{    if (_progress) {        [_progress removeObserver:self forKeyPath:@"fractionCompleted"];    }    _progress = nil;}#pragma mark KVO- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    if ([keyPath isEqualToString:@"fractionCompleted"]) {        NSProgress *progress = (NSProgress *)object;        NSProgress *cellProgress = _offsourecebean.cDownloadTask.progress;        BOOL belongSelf = NO;        if (cellProgress && cellProgress == progress) {            belongSelf = YES;        }        dispatch_async(dispatch_get_main_queue(), ^{            if (self) {                [self showProgress:progress belongSelf:belongSelf];            }        });    } else {        [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];    }}*注意增加監聽后在不用時要進行消除,移除觀察,其中addObserver可以是其它對象,然后在其內部實現observeValueForKeyPath這個協議;增加監聽時可以設置options類型,也可以多類型一起;比如NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld;當被監聽的對象發生變化時,會馬上通知監聽對象,使它可以做出一些響應,比如視圖的更新;

 5:自定義UITableViewCell的accessoryView 判斷哪個Button按下

UITableview的開發中經常要自定義Cell右側的AccessoryView,把他換成帶圖片的按鈕,并在用戶Tap時判斷出是哪個自定義按鈕被按下了。創建自定義按鈕,并設為AccessoryViewif (cell == nil) {     cell = [[UITableView alloc] initWithStyle:UITableViewCellStyleDefault                                  reuseIdentifier:identifier];        UIImage *image= [ UIImage imageNamed:@"delete.png" ];    UIButton *button = [ UIButton buttonWithType:UIButtonTypeCustom ];    CGRect frame = CGRectMake( 0.0 , 0.0 , image.size.width , image.size.height );    button. frame = frame;    [button setBackgroundImage:image forState:UIControlStateNormal ];    button. backgroundColor = [UIColor clearColor ];    [button addTarget:self action:@selector(buttonPressedAction  forControlEvents:UIControlEventTouchUpInside];     cell. accessoryView = button; } 如果將Button加入到cell.contentView中,也是可以的。cell.contentView addSubview:button];在Tap時進行判斷,得到用戶Tap的Cell的IndexPath- (void)buttonPressedAction  id)sender {    UIButton *button = (UIButton *)sender;    (UITableViewCell*)cell = [button superview];    int row = [myTable indexPathForCell:cell].row; } 對于加到contentview里的Button(UITableViewCell*)cell = [[button superview] superview];

6:直接運用系統自帶的UITableViewCell,其中cell.accessoryView可以自定義控件

#import "MyselfViewController.h"@interface MyselfViewController ()@property (nonatomic, retain) NSMutableArray *datasource;@end@implementation MyselfViewController-(void)dealloc {    [_datasource release];    [super dealloc];}-(NSMutableArray *)datasource {    if (!_datasource) {        self.datasource = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"MyselfList" ofType:@"plist"]];    }    return _datasource;}-(instancetype)init {    self = [super initWithStyle:UITableViewStyleGrouped];    if (self) {    }    return self;}- (void)viewDidLoad {    [super viewDidLoad];    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];    self.tableView.rowHeight = 70;    self.navigationItem.title = @"我的";}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}#pragma mark - Table view data source- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {    return self.datasource.count;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    // Return the number of rows in the section.    return [self.datasource[section] count];}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];    NSDictionary *dict = [self.datasource[indexPath.section] objectAtIndex:indexPath.row];    cell.textLabel.text = dict[@"title"];    cell.imageView.image = [UIImage imageNamed:dict[@"imageName"]];    if (indexPath.section == 2 && indexPath.row == 0) {        cell.accessoryView = [[[UISwitch alloc] init] autorelease];    } else {        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;    }        return cell;}@end

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩高清电影免费观看完整| 中文字幕九色91在线| 欧美黑人一级爽快片淫片高清| 久久亚洲精品小早川怜子66| www.日韩系列| 亚洲最大成人在线| 98精品国产高清在线xxxx天堂| 51视频国产精品一区二区| 久久久国产精品视频| 日韩中文字幕第一页| 精品国产鲁一鲁一区二区张丽| 精品一区二区亚洲| 日韩视频精品在线| 亚洲欧洲一区二区三区久久| 国产91在线播放精品91| 久久乐国产精品| 亚洲国产精品成人一区二区| 亚洲视频在线视频| 亚洲少妇激情视频| 国产香蕉97碰碰久久人人| 欧美黄色片免费观看| 亚洲一区二区三区777| 88国产精品欧美一区二区三区| 亚洲最大福利网| 欧美最顶级丰满的aⅴ艳星| 亚洲男人av在线| 国产精品69久久| 中文字幕精品av| 77777亚洲午夜久久多人| 欧美日韩中文字幕在线视频| 亚洲第一视频在线观看| 日韩毛片在线观看| 亚洲国产成人久久| 久久综合伊人77777尤物| 中文字幕视频一区二区在线有码| 91精品国产91久久久久久| 日韩欧美一区二区在线| 久久伊人精品视频| 欧美日韩高清在线观看| 美女啪啪无遮挡免费久久网站| 中文字幕一区日韩电影| 欧美人成在线视频| 国产精品普通话| 久久色免费在线视频| 国产精品第一页在线| 555www成人网| 亚洲国产精品久久久久秋霞蜜臀| 国产精品视频yy9099| 亚洲欧美国产制服动漫| 欧美丰满老妇厨房牲生活| 国产精品91久久| 在线视频国产日韩| 日韩大片免费观看视频播放| 亚洲电影免费观看| 欧美日韩福利视频| 美日韩精品免费观看视频| 国产亚洲人成网站在线观看| 亚洲精品小视频在线观看| 国产一区二区欧美日韩| 26uuu国产精品视频| 亚洲天堂av网| 高跟丝袜一区二区三区| 久久精品国产精品亚洲| 亚洲人成网站在线播| 一区三区二区视频| 久久久久久久久国产精品| 亚洲综合av影视| 日韩国产欧美精品在线| 日本精品一区二区三区在线播放视频| 欧美—级高清免费播放| 久久久久久久久久国产精品| 亚洲全黄一级网站| 亚洲成人a**站| 在线中文字幕日韩| 欧美成人性生活| 国产成人精品久久二区二区91| 亚洲伊人成综合成人网| 992tv成人免费视频| 久久香蕉精品香蕉| 欧美精品成人在线| 色噜噜狠狠色综合网图区| 久久久伊人日本| 久久久999成人| 91影院在线免费观看视频| 亚洲欧洲美洲在线综合| 91精品免费视频| 主播福利视频一区| 欧美激情第6页| 亚洲美腿欧美激情另类| 国产精品精品国产| 九九视频这里只有精品| 欧美老女人www| 亚洲美女激情视频| 国产精品久久视频| 国产精品久久久久久久久影视| 色琪琪综合男人的天堂aⅴ视频| 国产精品激情av在线播放| 大荫蒂欧美视频另类xxxx| 成人妇女淫片aaaa视频| 国产免费一区二区三区在线观看| 欧美尤物巨大精品爽| 成人欧美在线观看| 狠狠色噜噜狠狠狠狠97| 日韩黄色在线免费观看| 亚洲人成网7777777国产| 亚洲综合大片69999| 草民午夜欧美限制a级福利片| 久久久久久久久网站| 久久久久久成人精品| 伊人伊成久久人综合网站| 久热精品在线视频| 欧美另类在线观看| 日韩精品欧美激情| 北条麻妃一区二区三区中文字幕| 久久久中文字幕| 97国产成人精品视频| 一区二区三区视频观看| 动漫精品一区二区| 性欧美长视频免费观看不卡| 欧美激情在线一区| 久久久久久久激情视频| 国产精品嫩草视频| 日韩欧美一区二区三区| 亚洲第一二三四五区| 777国产偷窥盗摄精品视频| 国产精品丝袜久久久久久高清| 久久香蕉国产线看观看网| 亚洲精品中文字| 国产精品久久久久久久久男| 久久99精品久久久久久青青91| 国产美女91呻吟求| 国产91久久婷婷一区二区| 欧美黄色免费网站| 91黄色8090| 色中色综合影院手机版在线观看| 亚洲伊人久久大香线蕉av| 亚洲欧美www| 国产精品福利在线观看网址| 中文字幕日韩精品有码视频| 国产免费亚洲高清| 亚洲男人av电影| 久久国产精品亚洲| 亚洲第一av网站| 日本欧美在线视频| 亚洲国产天堂网精品网站| 久久久亚洲国产| 国产亚洲一级高清| 日韩有码在线视频| 自拍偷拍亚洲欧美| 亚洲第一区中文字幕| 麻豆精品精华液| 国产大片精品免费永久看nba| 国产激情999| 日韩亚洲第一页| 欧美国产视频日韩| 亚洲天堂av在线免费观看| 欧美黄色三级网站| 日韩电影中文 亚洲精品乱码| 亚洲欧美日韩网| 亚洲精品福利视频| 亚洲天堂免费观看| 日韩中文字幕视频在线观看| 久久精品视频导航| 国产精品露脸自拍|