1:Delegate運用
.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中會有要調用上面這個方法:[self.moreButton addTarget:self action:@selector(moreBtnClicked:) forControlEvents:UIControlEventTouchUpInside];而在調用這個插件的時候記得把delegate賦于self,并要把FilterHeaderViewDelegate引入到<>里;然后就可以實現這個deletage的方法;
2:實現UIButton不同狀態下的顯示
[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增加點擊事件
if (!_TicketView) { _TicketView=[UIView new]; _TicketView.backgroundColor=[UIColor whiteColor]; //增加點擊事件 UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(TickAction:)]; [_TicketView addGestureRecognizer:tapGesture]; [_BelowView addSubview:_TicketView]; }調用:-(void)TickAction:(id)sender{ NSLog(@"sdfsdfsdf");}
4:在ios7中出現滾動視圖UIScrollView不兼容問題,無法滾動
把contentSize定義放在viewDidLayoutSubviews中;-(void)viewDidLayoutSubviews{ _myScrollView.contentSize=CGSizeMake(SCREEN_WIDTH,600);}
5:對UIButton上的圖標進行翻轉
#define DEGREES_TO_RADIANS(angle) ((angle)/180.0 *M_PI)調用:_BtnMoreContent.imageView.transform = CGAffineTransformRotate(_BtnMoreContent.imageView.transform, DEGREES_TO_RADIANS(180));
6:創建一個背景圖片,并從網絡動態加載
在viewDidLoad調用:-(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) 將一個UIView顯示在最前面只需要調用其父視圖的 bringSubviewToFront()方法。將一個UIView層推送到背后只需要調用其父視圖的 sendSubviewToBack()方法。
7:加載xib到其它視圖中
創建一個UIView的xib文件,這個方程可以看網上隨便一個文章,主要是把屬性中的custom Class指定給創建的那個 .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) { //其它自個想增加到視圖里的 [self initViews]; } return self;}/** * @author wujunyang, 15-04-30 16:04:03 * * @brief 這邊是運用RKTABVIEW創建一個標簽的 */-(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然后調用視圖.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:不錯的插件
AutoLayout下自動計算UITableViewCell高度的擴展FDTemplateLayoutCell https://github.com/forkingdog/UITableView-FDTemplateLayoutCell多視圖控制器間進行切換--XLPagerTabStrip https://github.com/xmartlabs/XLPagerTabStrip不錯的標簽選項卡插件 https://github.com/RafaelKayumov/RKTabView
生成@3x圖片對應的@2x和@1x版本--RTImageAssets https://github.com/rickytan/RTImageAssets
使用:用來生成 @3x 的圖片資源對應的 @2x 和 @1x 版本,只要拖拽高清圖到 @3x 的位置上,然后按 Ctrl+Shift+A 即可自動生成兩張低清的補全空位。當然你也可以從 @2x 的圖生成 @3x 版本,如果你對圖片質量要求不高的話
9:ios7和ios8關于導航欄的那些事
ios7之前的版本中UIViewController中的view在顯示后會自動調整為去掉導航欄的高度的,控件會自動在導航欄以下擺放。在iOS7中UIViewController的wantsFullScreenLayout屬性被舍棄了,所有的UIViewController創建后默認就是full Screen的,因此如果帶導航欄的應用界面中的部分控件會被導航欄覆蓋掉。解決方案:可以使用ios7種UIViewController新增的屬性extendLayoutIncludesOpaqueBars和edgesForExtendedLayout來解決。其中這個屬性指定了當bar使用不透明圖片時,試圖是否延伸至bar所在區域,默認值為NO。而edgesForExtendedLayout其中這個屬性指定了當Bar使用了不透明圖片時,視圖是否延伸至Bar所在區域,默認值時NO。而edgesForExtendedLayout則是表示視圖是否覆蓋到四周的區域,默認是UIRectEdgeAll,即上下左右四個方向都會覆蓋,那么為讓頂部不進行延伸到導航欄覆蓋的區域,我們可以把頂部區域延伸去掉。實現代碼如下:self.extendedLayoutIncludesOpaqueBars = NO;self.edgesForExtendedLayout = UIRectEdgeBottom | UIRectEdgeLeft | UIRectEdgeRight;
11:initWithNibName/awakeFromNib/initWithCoder區別
第一、initWithNibName這個方法是在controller的類在IB中創建,但是通過Xcode實例化controller的時候用的. 第二、initWithCoder 是一個類在IB中創建但在xocde中被實例化時被調用的.比如,通過IB創建一個controller的nib文件,然后在xcode中通過 initWithNibName來實例化這個controller,那么這個controller的initWithCoder會被調用.或者是一個view的nib文件,類似方法創建時調用initWithCoder 第三、awakeFromNib 當.nib文件被加載的時候,會發送一個awakeFromNib的消息到.nib文件中的每個對象,每個對象都可以定義自己的awakeFromNib函數來響應這個消息,執行一些必要的操作。也就是說通過nib文件創建view對象時執行awakeFromNib 第四、關于 initWithNibName 和 loadNibNamed 的區別和聯系 : 關于 initWithNibName 和 loadNibNamed 的區別和聯系。之所以要把這兩者來一起講,我覺的我也有點困惑,到底用那種?其實真正搞清楚了他們之間的差別,就不會這么迷惘了。因為這兩個方法,根本就不是一路貨色。 既然,是要說明這2個方法,那就著重將區別吧。 但是第一步,還是要羅嗦一下,他們的聯系:可以使用此方法加載用戶界面(xib文件)到我們的代碼中,這樣,可以通過操作這個加載進來的(xib)對象,來操作xib文件內容。 下面進入主題,談區別: 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]; 總結: 只看他們初始化,那可能感覺是一樣的。但是如果,打開分別看xib的關系的時候,才恍然大悟,原來他們的集成類都不一樣。 1. initWithNibName要加載的xib的類為我們定義的視圖控制器類 2.加載方式不同 initWithNibName方法:是延遲加載,這個View上的控件是 nil 的,只有到 需要顯示時,才會不是 nil loadNibNamed方法:即時加載,用該方法加載的xib對象中的各個元素都已經存在。 (認真理解這句幫規: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的區別 nitWithoder 是當從nib文件中加載對象的時候會調用,比如你的view來自nib那么就會調用這個view的這個函數。(由框架調用) initWithFrame (是由用戶調用,來初始化對象的)
新聞熱點
疑難解答