iOS_6_ToolBar+xib+红楼梦

最终效果图

BeyondViewController.h

//
//  BeyondViewController.h
//  6_ToolBar
//
//  Created by beyond on 14-7-24.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface BeyondViewController : UIViewController
- (IBAction)addClick:(UIBarButtonItem *)sender;
- (IBAction)removeClick:(UIBarButtonItem *)sender;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *trashItem;
// 从xib界面中拖过来的,前提是设置界面中的file 's owner 为当前控制器类,并且,在代码中加载nib的时候,也要指明owner是当前控制器类的实例对象,一般写self或者空
- (IBAction)deleteBtnClick:(UIButton *)sender;
- (IBAction)headBtnClick:(UIButton *)sender;

@end

BeyondViewController.m

//
//  BeyondViewController.m
//  6_ToolBar
//
//  Created by beyond on 14-7-24.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "BeyondViewController.h"
#import "RowView.h"
#define kRowHight 65
// 类扩展 class extension 也叫匿名分类
@interface BeyondViewController ()
{
    // 成员,数组,由姓名组成
    NSArray *_array_name;
    // 数组取值时的索引,与图片名挂钩
    int _index;
}

@end

@implementation BeyondViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    _array_name [email protected][@"林黛玉",@"薛宝钗",@"妙玉",@"史湘云",@"探春",@"晴雯",@"nana"];
	_index = 0;
}

- (IBAction)addClick:(UIBarButtonItem *)sender {
    // 调用自定义方法,通过代码创建一行rowView
    // UIView *rowView = [self createRowViewByCoding];

    // 调用自定义方法,通过xib创建一行rowView
    UIView *rowView = [self createRowViewByXcodeInterfaceBuilding];

    // 调用自定义方法,通过RowView的类方法,返回一个RowView的实例对象
    // UIView *rowView = [self createRowViewByXIB];

    // 3,添加到当前控制器的view
    [self.view addSubview:rowView];
    // 5,动画效果
    [UIView animateWithDuration:0.2 animations:^{
        // 以下三步为OC标准代码,因为OC中不允许直接修该对象中结构体属性的成员的值,要通过中间的临时结构体变量
        CGRect frame = rowView.frame;
        frame.origin.x = 0;
        rowView.frame=frame;
        rowView.alpha = 1;
    } completion:^(BOOL finished) {
        // 4,置删除按钮为可用
        _trashItem.enabled = YES;
    }];
}
// 用xib创建一行 rowView,xib <--> nib   ipa <-->apk
- (UIView *)createRowViewByXIB
{
    // 如果添加到了数组最后一张,从头开始添加
    if (_index >= _array_name.count) {
        _index = 0;
    }

    // 下面先计算3个参数,图片名,姓名,rowView要显示的frame的Y坐标
    NSString *imgName = [NSString stringWithFormat:@"%d.png",_index];
    NSString *labelName = _array_name[_index];
    // 新添加一行的y值 取决于view中最后一个子控件的y + height + 1
    UIView *lastView = self.view.subviews.lastObject;
    CGFloat rowY = lastView.frame.origin.y + lastView.frame.size.height+1;

    // 调用类方法,返回一个创建好了的rowView
    RowView *rowView = [RowView rowViewWithHeadName:imgName andLabelName:labelName andRowY:rowY];

    // 为下一次添加行作准备
    _index++;
    return rowView;
}
// 用xib创建一行 rowView,xib <--> nib   ipa <-->apk
- (UIView *)createRowViewByXcodeInterfaceBuilding
{
    // mainBundel加载xib,扩展名不用写.xib  owner为nil时,手动addTarget,若为xib界面中file's owner指定的class的实例对象时,填self,这样就可以直接拖线
    // 1,xib界面中file's owner指定的类class,目的仅仅是右击界面时,可以弹出连线
    // 2,进行连线
    // 3,代码loadNibNamed中指定owner为哪个实例对象,相当于addTarget中的第一个参数
    NSArray *arrayXibObjects = [[NSBundle mainBundle] loadNibNamed:@"rowView" owner:self options:nil];
    UIView *rowView = arrayXibObjects[0];
    // 新添加一行的y值 取决于view中最后一个子控件的y + height + 1
    UIView *lastView = self.view.subviews.lastObject;
    CGFloat rowY = lastView.frame.origin.y + lastView.frame.size.height+1;
    rowView.backgroundColor = [UIColor grayColor];
    CGFloat winWidth = self.view.frame.size.width;
    rowView.frame = CGRectMake(320, rowY,winWidth, kRowHight);
    rowView.alpha = 0;

    // 如果添加到了数组最后一张,从头开始添加
    if (_index >= _array_name.count) {
        _index = 0;
    }

    // 2,设置label内容
    UILabel *name = (UILabel *)[rowView viewWithTag:1];

    name.text = _array_name[_index];

    // 3,设置headBtn内容
    UIButton *btn = (UIButton *)[rowView viewWithTag:2];
    NSString *imgName = [NSString stringWithFormat:@"%d.png",_index];
    UIImage *img = [UIImage imageNamed:imgName];
    [btn setImage:img forState:UIControlStateNormal];
    // 为按钮添加点击事件
    // [btn addTarget:self action:@selector(headBtnClick:) forControlEvents:UIControlEventTouchUpInside];

    // 4,设置deleteBtn内容
    UIButton *del = (UIButton *)[rowView viewWithTag:3];
    // 为删除按钮添加点击事件
    [del addTarget:self action:@selector(deleteBtnClick:) forControlEvents:UIControlEventTouchUpInside];

    // 为下一次添加行作准备
    _index++;
    return rowView;
}
// 用代码创建一行 rowView
- (UIView *)createRowViewByCoding
{
    // 如果添加到了数组最后一张,从头开始添加
    if (_index >= _array_name.count) {
        _index = 0;
    }
    // 添加一行,实为view,view中左边是头像,右边是名字
    UIView *rowView = [[UIView alloc]init];
    // 新添加一行的y值 取决于view中最后一个子控件的y + height + 1
    UIView *lastView = self.view.subviews.lastObject;
    CGFloat rowY = lastView.frame.origin.y + lastView.frame.size.height+1;
    rowView.backgroundColor = [UIColor grayColor];
    CGFloat winWidth = self.view.frame.size.width;
    rowView.frame = CGRectMake(320, rowY,winWidth, kRowHight);
    rowView.alpha = 0;
    // 2,添加label到view
    UILabel *name = [[UILabel alloc]init];
    name.frame = CGRectMake(0, 0, 320, kRowHight);
    name.backgroundColor = [UIColor clearColor];
    name.textAlignment = NSTextAlignmentCenter;
    name.tag = 1; //方便后面点击头像按钮时,得到兄弟标签即姓名
    // 随机索引,取姓名,取图片用的
    //int randIndex = arc4random_uniform(_array_name.count);
    //name.text = _array_name[randIndex];
    name.text = _array_name[_index];
    [rowView addSubview:name];

//    3,添加头像到view
//    UIImage *img = [UIImage imageNamed:@"nana.jpg"];
//    UIImageView *head = [[UIImageView alloc]initWithImage:img];
//    head.frame = CGRectMake(0, 0,50, 50);
//    [rowView addSubview:head];

    // 3,添加头像按钮到view
    UIButton *btn = [[UIButton alloc]init];
    btn.frame = CGRectMake(0, 0,65, kRowHight);
    NSString *imgName = [NSString stringWithFormat:@"%d.png",_index];
    UIImage *img = [UIImage imageNamed:imgName];
    [btn setImage:img forState:UIControlStateNormal];
    // 为按钮添加点击事件
    [btn addTarget:self action:@selector(headBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [rowView addSubview:btn];

    // 4,添加删除按钮到view
    UIButton *del = [[UIButton alloc]init];
    del.frame = CGRectMake(260, 0,65, kRowHight);
    [del setTitle:@"再见" forState:UIControlStateNormal];
    // 为删除按钮添加点击事件
    [del addTarget:self action:@selector(deleteBtnClick:) forControlEvents:UIControlEventTouchUpInside];
    [rowView addSubview:del];

    // 为下一次添加行作准备
    _index++;
    return rowView  ;
}
// 点击rowView里面的删除按钮
- (void)deleteBtnClick:(UIButton *)sender
{
    // 拿到rowView
    UIView *rowView = sender.superview;

    [UIView animateWithDuration:0.3 animations:^{
        // 以下三步为OC标准代码,因为OC中不允许直接修该对象中结构体属性的成员的值,要通过中间的临时结构体变量
        CGRect frame = rowView.frame;
        frame.origin.x = 320;
        rowView.frame=frame;
        rowView.alpha = 0;
    } completion:^(BOOL finished) {
        // rowView在父容器中的索引
        int rowView_index = [self.view.subviews indexOfObject:rowView];
        // 将rowView从其父控件中,即self.view中删除
        [rowView removeFromSuperview];
         _trashItem.enabled = self.view.subviews.count!=1;

        // rowView身后的这些rowView动画上移
        for (int i=rowView_index; i<self.view.subviews.count; i++) {
            // rowView身后的这些rowView动画上移
            UIView *rowViewSibling = self.view.subviews[i];
            [UIView animateWithDuration:0.3 animations:^{
                // 以下三步为OC标准代码,因为OC中不允许直接修该对象中结构体属性的成员的值,要通过中间的临时结构体变量
                CGRect frame = rowViewSibling.frame;
                frame.origin.y -= kRowHight + 1;
                rowViewSibling.frame=frame;
            }];
        }
    }];

}

// 点击头像按钮,弹出alterView
- (void)headBtnClick:(UIButton *)sender
{
    NSLog(@"点击了头像按钮--%@",sender);
    UIView *rowView = sender.superview;
    UILabel *name = (UILabel *)[rowView viewWithTag:1];
    NSLog(@"被点击的按钮的兄弟标签是:%@",name);

    // 弹出alterView
    UIAlertView *alert = [[UIAlertView alloc]init];

    [alert show];
}

// 点击删除按钮Item
- (IBAction)removeClick:(UIBarButtonItem *)sender {
    _trashItem.enabled = NO;
    // 删除最后一行
    UIView *last = [self.view.subviews lastObject];
    Class cls = [UIToolbar class];
    if ([last isKindOfClass:cls]) {
        return;
    }
    // 动画效果
    [UIView animateWithDuration:0.2 animations:^{
        // 以下三步为OC标准代码,因为OC中不允许直接修该对象中结构体属性的成员的值,要通过中间的临时结构体变量
        CGRect frame = last.frame;
        frame.origin.x = 320;
        last.frame=frame;
        last.alpha = 0;
    } completion:^(BOOL finished) {
        // 动画完毕,从父控件中移除
        [last removeFromSuperview];
        // 删除完之后,让删除barbuttionitem置灰
        _trashItem.enabled = self.view.subviews.count != 1;
    }];

}

@end

RowView.h

//
//  RowView.h
//  6_ToolBar
//
//  Created by beyond on 14-7-24.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface RowView : UIView
@property (weak, nonatomic) IBOutlet UIButton *headBtn;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
- (IBAction)deleteBtnClick:(UIButton *)sender;
+ (RowView *)rowViewWithHeadName:(NSString *)headName andLabelName:(NSString *)labelName andRowY:(CGFloat)rowY;
@end

RowView.m

//
//  RowView.m
//  6_ToolBar
//
//  Created by beyond on 14-7-24.
//  Copyright (c) 2014年 com.beyond. All rights reserved.
//

#import "RowView.h"
#define kRowHight 65
@implementation RowView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

// + 类方法中不能直接使用_访问成员变量,必须通过对象.点语法访问成员变量
// 参数1:头像按钮的图标名,参数2:姓名标签
+ (RowView *)rowViewWithHeadName:(NSString *)headName andLabelName:(NSString *)labelName andRowY:(CGFloat)rowY
{
    // mainBundel加载xib,扩展名不用写.xib
    NSArray *arrayXibObjects = [[NSBundle mainBundle] loadNibNamed:@"rowView" owner:nil options:nil];

    RowView *rowView = arrayXibObjects[0];
    // 1,设置rowView的属性
    rowView.backgroundColor = [UIColor grayColor];
    // 先是在屏幕外面,所以x是320
    rowView.frame = CGRectMake(320, rowY,320, kRowHight);
    rowView.alpha = 0;

    // 2,设置label内容
    // tag要遍历,效率低,不推荐,最好是rowView.xib连线到RowView.h文件,使用成员变量
    // UILabel *nameLabel = (UILabel *)[rowView viewWithTag:1];

    rowView.nameLabel.text = labelName;

    // 3,设置headBtn内容
    // tag要遍历,效率低,不推荐,最好是rowView.xib连线到RowView.h文件,使用成员变量
    // UIButton *headBtn = (UIButton *)[rowView viewWithTag:2];

    UIImage *img = [UIImage imageNamed:headName];
    [rowView.headBtn setImage:img forState:UIControlStateNormal];
    return rowView;
}

// rowView中的删除按钮被点击了
- (IBAction)deleteBtnClick:(UIButton *)sender {
    // 拿到rowView
    UIView *rowView = sender.superview;

    [UIView animateWithDuration:0.3 animations:^{
        // 以下三步为OC标准代码,因为OC中不允许直接修该对象中结构体属性的成员的值,要通过中间的临时结构体变量
        CGRect frame = rowView.frame;
        frame.origin.x = 320;
        rowView.frame=frame;
        rowView.alpha = 0;
    } completion:^(BOOL finished) {
        //NSLog(@"rowView.superView is %@",rowView.superview);
        // 先得到控制器的UIView
        UIView *control_view = rowView.superview;
        // rowView在父容器中的索引
        int rowView_index = [control_view.subviews indexOfObject:rowView];
        // 将rowView从其父控件中,即self.view中删除
        [rowView removeFromSuperview];
        // rowView身后的这些rowView动画上移
        for (int i=rowView_index; i<control_view.subviews.count; i++) {
            // rowView身后的这些rowView动画上移
            UIView *rowViewSibling = control_view.subviews[i];
            [UIView animateWithDuration:0.3 animations:^{
                // 以下三步为OC标准代码,因为OC中不允许直接修该对象中结构体属性的成员的值,要通过中间的临时结构体变量
                CGRect frame = rowViewSibling.frame;
                frame.origin.y -= kRowHight + 1;
                rowViewSibling.frame=frame;
            }];
        }
    }];
}

@end

RowView.xib

iOS_6_ToolBar+xib+红楼梦,布布扣,bubuko.com

时间: 2024-12-25 17:40:55

iOS_6_ToolBar+xib+红楼梦的相关文章

西游记红楼梦随感

熙熙攘攘,心物是非,理学心学,有无之争, 六根六尘,不停打转,滚滚戏场,你方罢台, 他即登场,无住生心,主客体化,悟红楼梦, 品西游记,阅大正藏,泛系相对,万物传神, 省察矫正,觉身口意,修戒定慧,灭贪嗔痴, 如实证见,无上清凉. 入红楼梦,太虚幻境,真假泛互,修行顽石, 慕富贵场,贪温柔乡,终悟梦幻,士隐雨村, 大起大落,大有大无,一离一入. 进西游记,借体神话,丹道佛理,含蓄彰显, 寓意深远,君不曾见,斜月三星,灵台方寸, 六贼无踪,如此等等,随缘随悟. 巴利三藏,须闻思修,四谛八道,二十四

用R进行文本分析初探——以《红楼梦》为例

刚刚接触R语言和文本分析,为了将二者结合,试着对<红楼梦>进行分析,首先对<红楼梦>进行分词处理,并统计词频,同时画出标签云. 其实文本分析还可以分析其它很多东西,我的下一步打算分析新浪微博.现在先写一个小的分析,作为学习用. 文本分析是指对文本的表示及其特征项的选取:文本分析是文本挖掘.信息检索的一个基本问题,它把从文本中抽取出的特征词进行量化来表示文本信息. 一.需要加载的包 需要用到rJava,Rwordseg,wordcloud 安装步骤: 1.安装java: http:/

神经网络判断红楼梦的作者

最近发现了一篇有意思的文章,用SVM去判断红楼梦的作者是不是同一个人 原理就是在文言文中,文言虚词分布均匀,书中每个回目都会出现很多文言虚词,差别在于出现频率不同,我们把文言虚词的出现频率作为特征. 所以我也用了神经网络实现了一下,因为训练样本较小,直接做了一个2层神经网络 #!/usr/bin/python # -*- coding:utf-8 -*- import numpy as np import tflearn from tflearn.data_utils import to_cat

红楼梦诗词全集---留一份吧,太珍贵了!!

太珍贵了!!红楼梦诗词全集---留一份吧-- 一把辛酸泪浸透了满纸的荒唐言,曹雪芹手中握了一卷一梦千古的红楼,眉宇间隐约一丝很远古的悲凉.红楼的宿命牵着前生后事的传说,黛玉亏欠宝玉的甘露,便要换一世的眼泪,纵然是情深意长,终究还是扯不断心事终虚化的无可奈何,泪尽而归的结果,也不过是为了偿还前世的风月情债. 葬花吟 花谢花飞飞满天,红消香断有谁怜? 游丝系飘春榭,落絮轻沾扑绣帘. 闺中女儿惜春暮,愁绪满怀无释处. 手把花锄出绣帘,忍踏落花来复去? 柳丝榆荚自芳菲,不管桃飘与李飞. 桃李明年能再发,

iOS_12_tableViewCell的删除更新_红楼梦

最终效果图: Girl.h // // Girl.h // 12_tableView的增删改 // // Created by beyond on 14-7-27. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <Foundation/Foundation.h> @interface Girl : NSObject // UI控件用weak,字符串用copy,其他对象用strong // 头像图片名 @pr

iOS_13_tableView的编辑模式_红楼梦

最终效果图: Girl.h // // Girl.h // 12_tableView的增删改 // // Created by beyond on 14-7-27. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <Foundation/Foundation.h> @interface Girl : NSObject // UI控件用weak,字符串用copy,其他对象用strong // 头像图片名 @pr

用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小说中的词云. 首先当然要导入我们需要用到的包,下面import进来的包,都是我们将在接下来的程序中使用到的包,如果大家还没有安装它们,那么尽快安装它们吧. import jieba import numpy import codecs import pandas import matplotlib.p

红楼梦里宝玉与六个女孩有特殊关系,从名字就看得出来

在红楼梦中,因为宝玉含玉出生,玉在贾府变得传奇而神圣.也许是曹公有意,给红楼梦中的一些女孩子起名时也特意用了玉字,也许是想牵引出她们此生和宝玉的交集和联系. 林黛玉 提起宝玉不得不说的人就是黛玉,因为黛玉是宝玉此生的挚爱,黛玉和宝玉的爱情美好而单纯,看到他们便让人充满了对爱情的憧憬.看着他们就想到了天荒地老和岁月静好,也一直很期盼可以看到他们喜结连理,曹公未完的红楼梦正好让我们可以幻想一个美好的结局. 黛玉和宝玉是青梅竹马,他们从懵懂到明白爱情的真谛,最好的岁月都是对方陪自己度过,黛玉生不仅是宝

从《红楼梦》看古代贵族如何过重阳节

重阳节与端午.除夕等节日一样,为中国最重要的传统节日之一,据史料记载,它起始于春秋战国时期,普及于西汉,兴盛于唐代并被正式定为民间节日,可以说有着悠久的历史. 文人墨客的作品中多有关于重阳节的记载,唐代王维的诗<九月九日忆山东兄弟>中的"独在异乡为异客,每逢佳节倍思亲"中的"佳节"写的就是重阳节.孟浩然的<过故人庄>中的"待到重阳日,还来就菊花."写的也是重阳. 不仅诗词里多有描述,古典名著里亦有较多描写,<红楼梦&