1:Delegate運(yùn)用
.h#import <UIKit/UIKit.h>@PRotocol FilterHeaderViewDelegate <NSObject>@required-(void)filterHeaderViewMoreBtnClicked:(id)sender;@endextern float CYLFilterHeaderViewHeigt;@interface FilterHeaderView : UICollectionReusableView@property (nonatomic, weak ) id<FilterHeaderViewDelegate> delegate;@end.m- (void)moreBtnClicked:(id)sender { if ([self.delegate respondsToSelector:@selector(filterHeaderViewMoreBtnClicked:)]) { [self.delegate filterHeaderViewMoreBtnClicked:self.moreButton]; }}注意在.m中會有要調(diào)用上面這個(gè)方法:[self.moreButton addTarget:self action:@selector(moreBtnClicked:) forControlEvents:UIControlEventTouchUpInside];而在調(diào)用這個(gè)插件的時(shí)候記得把delegate賦于self,并要把FilterHeaderViewDelegate引入到<>里;然后就可以實(shí)現(xiàn)這個(gè)deletage的方法;
2:實(shí)現(xiàn)UIButton不同狀態(tài)下的顯示
[btn setTitle:@"更多" forState:UIControlStateNormal]; [btn setTitle:@"收起" forState:UIControlStateSelected]; btn.titleLabel.font = [UIFont systemFontOfSize:12]; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [btn setTitleColor:[UIColor blackColor] forState:UIControlStateSelected]; btn.adjustsImageWhenHighlighted = NO; [btn setImage:[UIImage imageNamed:@"home_btn_more_normal"] forState:UIControlStateNormal]; [btn setImage:[UIImage imageNamed:@"home_btn_more_selected"] forState:UIControlStateSelected]; btn.titleEdgeInsets = UIEdgeInsetsMake(0, -btn.imageView.frame.size.width-kImageToTextMargin, 0, btn.imageView.frame.size.width); btn.imageEdgeInsets = UIEdgeInsetsMake(0, btn.titleLabel.frame.size.width, 0, -btn.titleLabel.frame.size.width);
3:視圖uiview增加點(diǎn)擊事件
if (!_TicketView) { _TicketView=[UIView new]; _TicketView.backgroundColor=[UIColor whiteColor]; //增加點(diǎn)擊事件 UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(TickAction:)]; [_TicketView addGestureRecognizer:tapGesture]; [_BelowView addSubview:_TicketView]; }調(diào)用:-(void)TickAction:(id)sender{ NSLog(@"sdfsdfsdf");}
4:在ios7中出現(xiàn)滾動視圖UIScrollView不兼容問題,無法滾動
把contentSize定義放在viewDidLayoutSubviews中;-(void)viewDidLayoutSubviews{ _myScrollView.contentSize=CGSizeMake(SCREEN_WIDTH,600);}
5:對UIButton上的圖標(biāo)進(jìn)行翻轉(zhuǎn)
#define DEGREES_TO_RADIANS(angle) ((angle)/180.0 *M_PI)調(diào)用:_BtnMoreContent.imageView.transform = CGAffineTransformRotate(_BtnMoreContent.imageView.transform, DEGREES_TO_RADIANS(180));
6:創(chuàng)建一個(gè)背景圖片,并從網(wǎng)絡(luò)動態(tài)加載
在viewDidLoad調(diào)用:-(void)LoadBackViewImage{ UIImageView *bgView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)]; bgView.image=[UIImage imageNamed:@"bgWeatherEmpty"]; [bgView sd_setImageWithURL:[NSURL URLWithString:self.backImageUrl] placeholderImage:[UIImage imageNamed:@"bgWeatherEmpty"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { dispatch_async(dispatch_get_main_queue(), ^{ bgView.image=image; [self.view addSubview:bgView]; [self.view sendSubviewToBack:bgView]; }); }];}注意:UIView層次管理(sendSubviewToBack,bringSubviewToFront) 將一個(gè)UIView顯示在最前面只需要調(diào)用其父視圖的 bringSubviewToFront()方法。將一個(gè)UIView層推送到背后只需要調(diào)用其父視圖的 sendSubviewToBack()方法。
7:加載xib到其它視圖中
創(chuàng)建一個(gè)UIView的xib文件,這個(gè)方程可以看網(wǎng)上隨便一個(gè)文章,主要是把屬性中的custom Class指定給創(chuàng)建的那個(gè) .h文件;.h#import <UIKit/UIKit.h>@interface LKTextView : UIView@property (strong, nonatomic) IBOutlet UILabel *lbText;- (IBAction)bt_pressed:(id)sender;@property (strong, nonatomic) IBOutlet UITextField *textView;+(LKTextView*)instanceTextView;@end.m#import "LKTextView.h"#import "RKTabView.h"#import "RKTabItem.h"@implementation LKTextView@synthesize textView;@synthesize lbText;+(LKTextView *)instanceTextView{ NSArray* nibView = [[NSBundle mainBundle] loadNibNamed:@"LKTextView" owner:nil options:nil]; return [nibView objectAtIndex:0];}-(id)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if(self) { //其它自個(gè)想增加到視圖里的 [self initViews]; } return self;}/** * @author wujunyang, 15-04-30 16:04:03 * * @brief 這邊是運(yùn)用RKTABVIEW創(chuàng)建一個(gè)標(biāo)簽的 */-(void)initViews{ UIView *vi=[[UIView alloc] initWithFrame:CGRectMake(0, 0, 20, 30)]; vi.backgroundColor=[UIColor redColor]; [self addSubview:vi]; RKTabView *titledTabsView=[[RKTabView alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; [self addSubview:titledTabsView]; RKTabItem *mastercardTabItem = [RKTabItem createUsualItemWithImageEnabled:nil imageDisabled:[UIImage imageNamed:@"mastercard"]]; mastercardTabItem.titleString = @"MasterCard"; RKTabItem *paypalTabItem = [RKTabItem createUsualItemWithImageEnabled:nil imageDisabled:[UIImage imageNamed:@"paypal"]]; paypalTabItem.titleString = @"PayPal"; RKTabItem *visaTabItem = [RKTabItem createUsualItemWithImageEnabled:nil imageDisabled:[UIImage imageNamed:@"visa"]]; visaTabItem.titleString = @"Visa"; RKTabItem *wuTabItem = [RKTabItem createUsualItemWithImageEnabled:nil imageDisabled:[UIImage imageNamed:@"wu"]]; wuTabItem.titleString = @"Western Union"; RKTabItem *wireTabItem = [RKTabItem createUsualItemWithImageEnabled:nil imageDisabled:[UIImage imageNamed:@"wire-transfer"]]; wireTabItem.titleString = @"Wire Transfer"; //mastercardTabItem.tabState = TabStateEnabled; titledTabsView.darkensBackgroundForEnabledTabs = YES; titledTabsView.horizontalInsets = HorizontalEdgeInsetsMake(25, 25); titledTabsView.titlesFontColor = [UIColor colorWithWhite:0.9f alpha:0.8f]; titledTabsView.tabItems = @[mastercardTabItem, paypalTabItem, visaTabItem, wuTabItem, wireTabItem];}/*// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect{ // Drawing code}*/- (IBAction)bt_pressed:(id)sender { lbText.text = textView.text;}@end然后調(diào)用視圖.m:- (void)viewDidLoad{ LKTextView* text = [LKTextView instanceTextView]; text.frame = CGRectMake(100, 100, text.frame.size.width, text.frame.size.height); text.textView.text = @"input "; [self.view addSubview:text]; [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}
8:不錯(cuò)的插件
AutoLayout下自動計(jì)算UITableViewCell高度的擴(kuò)展FDTemplateLayoutCell https://github.com/forkingdog/UITableView-FDTemplateLayoutCell多視圖控制器間進(jìn)行切換--XLPagerTabStrip https://github.com/xmartlabs/XLPagerTabStrip不錯(cuò)的標(biāo)簽選項(xiàng)卡插件 https://github.com/RafaelKayumov/RKTabView
生成@3x圖片對應(yīng)的@2x和@1x版本--RTImageAssets https://github.com/rickytan/RTImageAssets
使用:用來生成 @3x 的圖片資源對應(yīng)的 @2x 和 @1x 版本,只要拖拽高清圖到 @3x 的位置上,然后按 Ctrl+Shift+A 即可自動生成兩張低清的補(bǔ)全空位。當(dāng)然你也可以從 @2x 的圖生成 @3x 版本,如果你對圖片質(zhì)量要求不高的話
9:ios7和ios8關(guān)于導(dǎo)航欄的那些事
ios7之前的版本中UIViewController中的view在顯示后會自動調(diào)整為去掉導(dǎo)航欄的高度的,控件會自動在導(dǎo)航欄以下擺放。在iOS7中UIViewController的wantsFullScreenLayout屬性被舍棄了,所有的UIViewController創(chuàng)建后默認(rèn)就是full Screen的,因此如果帶導(dǎo)航欄的應(yīng)用界面中的部分控件會被導(dǎo)航欄覆蓋掉。解決方案:可以使用ios7種UIViewController新增的屬性extendLayoutIncludesOpaqueBars和edgesForExtendedLayout來解決。其中這個(gè)屬性指定了當(dāng)bar使用不透明圖片時(shí),試圖是否延伸至bar所在區(qū)域,默認(rèn)值為NO。而edgesForExtendedLayout其中這個(gè)屬性指定了當(dāng)Bar使用了不透明圖片時(shí),視圖是否延伸至Bar所在區(qū)域,默認(rèn)值時(shí)NO。而edgesForExtendedLayout則是表示視圖是否覆蓋到四周的區(qū)域,默認(rèn)是UIRectEdgeAll,即上下左右四個(gè)方向都會覆蓋,那么為讓頂部不進(jìn)行延伸到導(dǎo)航欄覆蓋的區(qū)域,我們可以把頂部區(qū)域延伸去掉。實(shí)現(xiàn)代碼如下:self.extendedLayoutIncludesOpaqueBars = NO;self.edgesForExtendedLayout = UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight;
11:initWithNibName/awakeFromNib/initWithCoder區(qū)別
第一、initWithNibName這個(gè)方法是在controller的類在IB中創(chuàng)建,但是通過Xcode實(shí)例化controller的時(shí)候用的. 第二、initWithCoder 是一個(gè)類在IB中創(chuàng)建但在xocde中被實(shí)例化時(shí)被調(diào)用的.比如,通過IB創(chuàng)建一個(gè)controller的nib文件,然后在xcode中通過 initWithNibName來實(shí)例化這個(gè)controller,那么這個(gè)controller的initWithCoder會被調(diào)用.或者是一個(gè)view的nib文件,類似方法創(chuàng)建時(shí)調(diào)用initWithCoder 第三、awakeFromNib 當(dāng).nib文件被加載的時(shí)候,會發(fā)送一個(gè)awakeFromNib的消息到.nib文件中的每個(gè)對象,每個(gè)對象都可以定義自己的awakeFromNib函數(shù)來響應(yīng)這個(gè)消息,執(zhí)行一些必要的操作。也就是說通過nib文件創(chuàng)建view對象時(shí)執(zhí)行awakeFromNib 第四、關(guān)于 initWithNibName 和 loadNibNamed 的區(qū)別和聯(lián)系 : 關(guān)于 initWithNibName 和 loadNibNamed 的區(qū)別和聯(lián)系。之所以要把這兩者來一起講,我覺的我也有點(diǎn)困惑,到底用那種?其實(shí)真正搞清楚了他們之間的差別,就不會這么迷惘了。因?yàn)檫@兩個(gè)方法,根本就不是一路貨色。 既然,是要說明這2個(gè)方法,那就著重將區(qū)別吧。 但是第一步,還是要羅嗦一下,他們的聯(lián)系:可以使用此方法加載用戶界面(xib文件)到我們的代碼中,這樣,可以通過操作這個(gè)加載進(jìn)來的(xib)對象,來操作xib文件內(nèi)容。 下面進(jìn)入主題,談區(qū)別: 1. ShowViewController的initWithNibName方法 ShowViewController * showMessage = [[ShowViewController alloc] initWithNibName:@"ShowViewController" bundle:nil]; self.showViewController = showMessage; [showMessage release]; 2.VideoCellController的loadNibNamed方法 NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"Save3ViewController" owner:self options:nil] ; self.showViewController = [nib lastObject]; [nib objectAtIndex:0]; 總結(jié): 只看他們初始化,那可能感覺是一樣的。但是如果,打開分別看xib的關(guān)系的時(shí)候,才恍然大悟,原來他們的集成類都不一樣。 1. initWithNibName要加載的xib的類為我們定義的視圖控制器類 2.加載方式不同 initWithNibName方法:是延遲加載,這個(gè)View上的控件是 nil 的,只有到 需要顯示時(shí),才會不是 nil loadNibNamed方法:即時(shí)加載,用該方法加載的xib對象中的各個(gè)元素都已經(jīng)存在。 (認(rèn)真理解這句幫規(guī):when using loadNibNamed:owner:options:, the File's Owner should be NSObject, the main view should be your class type, and all outlets should be hooked up to the view, not the File's Owner.) 第五、initWithCoder和initWithFrame的區(qū)別 nitWithoder 是當(dāng)從nib文件中加載對象的時(shí)候會調(diào)用,比如你的view來自nib那么就會調(diào)用這個(gè)view的這個(gè)函數(shù)。(由框架調(diào)用) initWithFrame (是由用戶調(diào)用,來初始化對象的)
新聞熱點(diǎn)
疑難解答
圖片精選