WeiBo開(kāi)發(fā)經(jīng)歷

0##技術(shù)點(diǎn)1:下面圖片被選中的圖片應(yīng)該是棕橙色,為什么是藍(lán)色??怎么做??
UIViewController *vc1 = [[UIViewController alloc]init];
//自己設(shè)置的一個(gè)隨機(jī)色
vc1.view.backgroundColor = CWRandomColor;
vc1.tabBarItem.title = @"首頁(yè)";
vc1.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
vc1.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_home_selected"];

未選中tabbar_home

選中tabbar_home_selected
選中普通圖片后的顯示
  • 解決辦法:以第一個(gè)首頁(yè)為例,
    1.tabBarItem有這樣一個(gè)情況:如果你把一個(gè)普通的圖片給selectedImage,在選中的時(shí)候自動(dòng)渲染成藍(lán)色,下面咱們就需要阻止它渲染
    2.主要采用一個(gè)方法,不讓它進(jìn)行渲染(下面的圖片返回值為一張圖片直接給選中之后就好了)

  • (UIImage*)imageWithRenderingMode:(UIImageRenderingMode)renderingMode NS_AVAILABLE_IOS(7_0);

    UIViewController *vc1 = [[UIViewController alloc]init];
    //自己設(shè)置的一個(gè)隨機(jī)色
    vc1.view.backgroundColor = CWRandomColor;
    vc1.tabBarItem.title = @"首頁(yè)";
    vc1.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
     //聲明這張圖片按照原始的樣子顯示出來(lái),不要自動(dòng)渲染成其他顏色(比如藍(lán)色)
     vc1.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbar_home_selected"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];//原始的,原來(lái)的樣子
    
改變之后的顯示
  • 感悟:遇到問(wèn)題可以到官方文檔進(jìn)行搜,還可以進(jìn)行一些網(wǎng)站進(jìn)行搜索,下面提供一些方法

(1)官方搜索答案,比如這里的搜索UIImage看看有沒(méi)有新的功能,你會(huì)有不少的收獲。(2)百度搜索。(3)外國(guó)網(wǎng)站:stackoverflow(需要翻墻進(jìn)入),這個(gè)是一個(gè)專(zhuān)業(yè)的IT網(wǎng)站(十個(gè)問(wèn)題八個(gè)在這里都可以被解決掉)。特點(diǎn)是:全英文,由此可見(jiàn)學(xué)好英文很重要。

技術(shù)點(diǎn)2:如何改變上面字體的顏色呢??

解決辦法:系統(tǒng)的方法:要的式字典

-(void)setTitleTextAttributes:(nullable NSDictionary<NSString*,id>*)attributes forState:(UIControlState)state NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

改變字體的樣式(兩種,選中和沒(méi)有選中)

NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
textAttrs[NSForegroundColorAttributeName] = [UIColor blackColor];關(guān)鍵步驟
[vc1.tabBarItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal];

NSMutableDictionary *selectedtextAttrs = [NSMutableDictionary dictionary];
selectedtextAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor];
[vc1.tabBarItem setTitleTextAttributes:selectedtextAttrs  forState:UIControlStateSelected];
改變字體顏色的效果圖

技術(shù)點(diǎn)3 微博分欄里面的灰色不是我想要的,我要改變未選中狀態(tài)的顏色怎么辦???

解決辦法:采用取色計(jì)來(lái)取色,蘋(píng)果電腦spotlight搜索color,雙擊即可,鼠標(biāo)點(diǎn)在哪里哪里的RGB就會(huì)顯示出來(lái)

取色計(jì)
取色計(jì)的顯示

技術(shù)點(diǎn)4:遇到很多的相同代碼怎么辦???

解決辦法:
很多重復(fù)的代碼->將重復(fù)的代碼抽取到一個(gè)方法中
1.相同的代碼放到一個(gè)方法中
2.不同的東西變成參數(shù)
3.在使用這段代碼的地方調(diào)用

下面展示代碼的優(yōu)化:(調(diào)用方法來(lái)減少相同的代碼,提高傳參的高效性)

 //RGB顏色(255后面一定要有“.0”,切記)
 #define CWColor(r,g,b)  [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0];

//隨機(jī)色
#define CWRandomColor  CWColor(arc4random_uniform(256),arc4random_uniform(256),arc4random_uniform(256))

設(shè)置子控制器(4個(gè)子控制器)(添加導(dǎo)航控制器只需要在下面方法里面添加導(dǎo)航控制器,讓傳進(jìn)來(lái)的控制器作為其根控制器,把導(dǎo)航控制器的對(duì)象添加到tabBar里面)最后就是這樣一個(gè)模塊

框架的搭建
 CWHomeTableViewConreoller *homeVc = [[CWHomeTableViewConreoller alloc]init];

 [self addChildVc:homeVc Title:@"首頁(yè)" image:@"tabbar_home" selectedImage:@"tabbar_home_selected"];

 CWMessageTableViewController *messageVc = [[CWMessageTableViewController alloc]init];

 [self addChildVc:messageVc Title:@"消息" image:@"tabbar_message_center" selectedImage:@"tabbar_message_center_selected"];

 CWDiscoverTableViewController *discverVc = [[CWDiscoverTableViewController alloc]init];

 [self addChildVc:discverVc Title:@"發(fā)現(xiàn)" image:@"tabbar_discover" selectedImage:@"tabbar_discover_selected"];

 CWProfileTableViewController *profileVc =[[CWProfileTableViewController alloc]init];

 [self addChildVc:profileVc Title: @"我" image:@"tabbar_profile" selectedImage:@"tabbar_profile_selected"];


  -(void)addChildVc:(UIViewController *)childVc Title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage
{

    //自己設(shè)置的一個(gè)隨機(jī)色
    childVc.view.backgroundColor = CWRandomColor;

    childVc.tabBarItem.title = title;

    childVc.tabBarItem.image = [UIImage imageNamed:image];

    //聲明這張圖片按照原始的樣子顯示出來(lái),不要自動(dòng)渲染成其他顏色(比如藍(lán)色)
    childVc.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];//原始的,原來(lái)的樣子

    //改變字體的樣式(兩種,選中和沒(méi)有選中)
    NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
    textAttrs[NSForegroundColorAttributeName] = CWColor(123, 123, 123);
    [childVc.tabBarItem setTitleTextAttributes:textAttrs forState:UIControlStateNormal];

    NSMutableDictionary *selectedtextAttrs = [NSMutableDictionary dictionary];
    selectedtextAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor];
    [childVc.tabBarItem setTitleTextAttributes:selectedtextAttrs  forState:UIControlStateSelected];

}
簡(jiǎn)化更好

技術(shù)點(diǎn)5:怎么讓跳轉(zhuǎn)頁(yè)面tabBar隱藏???重點(diǎn)來(lái)了:怎么讓下一個(gè)控制器的tabBar隱藏,而不影響上一個(gè)控制器的tabBar(強(qiáng)烈推薦使用第一種)

  • 解決辦法:講3種(后兩種效果不好會(huì)影響前后的界面的tabBar隱藏與否)
    第一種:(把下面代碼放到跳轉(zhuǎn)頁(yè)面):hidesBottomBarWhenPushed

    CWTestViewController *testViewController = [[CWTestViewController alloc]init];//下一個(gè)控制器的實(shí)例化

    >//當(dāng)testViewController控制器被push的時(shí)候,testViewController所在的tabBarController的tabbar會(huì)自動(dòng)隱藏
    
//當(dāng)testViewController控制器被pop的時(shí)候,testViewController所在tabBarController的tabBar就會(huì)自動(dòng)顯示

 >    testViewController.hidesBottomBarWhenPushed = YES;

     [self.navigationController pushViewController:testViewController animated:YES];

第二種:(把下面代碼放到跳轉(zhuǎn)頁(yè)面)
     self.tabBarController.tabBar.hidden = YES ;

第三種:把代碼寫(xiě)在將要跳轉(zhuǎn)的控制器里面寫(xiě)上

     -(void)viewWillAppear:(BOOL)animated
     {
         [super viewWillAppear:animated];

         self.tabBarController.tabBar.hidden = YES ;
     }

技術(shù)點(diǎn)6:在我們進(jìn)行push切換控制器的時(shí)候怎么解決導(dǎo)航欄標(biāo)題長(zhǎng)的問(wèn)題???

  • 比如下面的“消息”這個(gè)標(biāo)題,當(dāng)進(jìn)入第二個(gè)控制器的時(shí)候如果它很長(zhǎng),怎么解決???以及后面更多的控制器又要怎么解決
第一個(gè)控制器
第二個(gè)控制器

解決辦法:(系統(tǒng)的方法不能給backBarButtonItem)

  • 1.新建一個(gè)繼承于UIViewController的類(lèi) ,在它的ViewDidLoad里面寫(xiě)上下面的代碼,讓其他的控制器繼承于它,而UITabViewController不能繼承與它,這樣表視圖的下一個(gè)控制器就無(wú)法設(shè)置自定義的“返回”;

backBarButtonItem只接受字體的賦值,比如說(shuō)“返回”,其他的比如說(shuō)圖片,系統(tǒng)的button都不接受

//建一個(gè)普通的的button給導(dǎo)航欄的 self.navigationItem.backBarButtonItem
UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(click)];
self.navigationItem.backBarButtonItem = backItem;
  • 2.對(duì)于上面的問(wèn)題作出了如下的解決辦法
    在UITabViewController類(lèi)的里面單獨(dú)設(shè)置下一個(gè)控制器的返回按鈕,也就是上面的代碼在表視圖的控制器里面再寫(xiě)一遍。

擴(kuò)展:有關(guān)導(dǎo)航欄上UIButtonItem的各類(lèi)設(shè)置(button的添加)

  • 1 設(shè)置一個(gè)自定義的button放在NavigationBar上:使后面的控制器都變?yōu)榉祷?/strong>
轉(zhuǎn)化前
轉(zhuǎn)化后
    UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(click)];
    
    //第一:把自定義的button給系統(tǒng)的返回按鈕
    self.navigationItem.backBarButtonItem = backItem;
    
    //第二:隨意放在左右兩個(gè)位置
    self.navigationItem.leftBarButtonItem = backItem;
    self.navigationItem.rightBarButtonItem = backItem;

    -(void)click
    {
        NSLog(@"實(shí)現(xiàn)什么功能以及其他的什么自己就設(shè)置");
    }
  • 2.系統(tǒng)的buttonItem(不可以隨便放)

       UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(click)];
    

    第一:不能給backBarButtonItem
    第二:可以設(shè)置左右位置和上面的一樣

  • 3.設(shè)置一個(gè)自定義的圖片作為返回按鈕??????難點(diǎn)???待解決

解決辦法:建類(lèi)來(lái)繼承,效果和代碼均如下

轉(zhuǎn)化前

特別強(qiáng)調(diào)圖片渲染的問(wèn)題(在此又產(chǎn)生了一個(gè)問(wèn)題:怎么讓選中的左右兩個(gè)按鈕在選中的情況下都是高亮的狀態(tài)???在下面技術(shù)點(diǎn)七講解)

轉(zhuǎn)化后(具有返回功能,在方法里面展示了,右側(cè)還添加了一個(gè)更多
- (void)viewDidLoad {
   [super viewDidLoad];
  
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[[UIImage imageNamed:@"navigationbar_back"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self  action:@selector(click)];

    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[[UIImage imageNamed:@"navigationbar_more"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStylePlain target:self action:@selector(clickMore)];

}
  
  -(void)click
  {
     [self.navigationController popViewControllerAnimated:YES];
  }

技術(shù)點(diǎn)7:上個(gè)問(wèn)題的遺留??導(dǎo)航欄上點(diǎn)住高亮如何設(shè)置???(也是切換圖片)

  • 解決辦法:新建button,坑:(1.自定義的button一定要設(shè)置size,2.方法是setBackgroundImage,不再是setImage,,如過(guò)不用切換圖片則initWithImage即可,3.button大小的設(shè)置,)

代碼如下:(添加多張圖片要選擇initWithCustomView)

//設(shè)置圖片

UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];

[backBtn addTarget:self action:@selector(clickBack) forControlEvents:UIControlEventTouchUpInside];

[backBtn setBackgroundImage:[UIImage imageNamed:@"navigationbar_back"] forState:UIControlStateNormal];

[backBtn setBackgroundImage:[UIImage imageNamed:@"navigationbar_back_highlighted"] forState:UIControlStateHighlighted];

//設(shè)置尺寸
CGSize size = backBtn.currentBackgroundImage.size;

backBtn.frame = CGRectMake(0, 0, size.width, size.height);

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backBtn];

技術(shù)點(diǎn)8: 上面兩個(gè)技術(shù)點(diǎn)在單個(gè)控制器和部分控制器可以適用,但是在“繼承的時(shí)候”跳轉(zhuǎn)到一些其他控制器就不適合了???

  • 問(wèn)題分析:(控制器就不要繼承了)
    以后在遇到UIController就不要再考慮繼承的問(wèn)題了,因?yàn)槔^承本身是有問(wèn)題的;比如說(shuō)進(jìn)入TableViewController的類(lèi)(tableView 就不存在了)

  • 解決辦法

統(tǒng)一所有控制器導(dǎo)航欄左上角和右上角的內(nèi)容(最好的方法)

(1) 讓所有push進(jìn)來(lái)的控制器,它導(dǎo)航欄左上角和右上角的內(nèi)容一樣(類(lèi)似返回按鈕)。

(2) 攔截所有push進(jìn)來(lái)的控制器。

(3) 方案:自定義導(dǎo)航控制器重寫(xiě)push的方法就可得到傳進(jìn)來(lái)的控制器參數(shù)。

方法:

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{

     具體的操作寫(xiě)在這里(  )

     重點(diǎn)提一下:
     
     1. 每次控制器push的時(shí)候都會(huì)來(lái)到這里,而這里的viewController  代表那個(gè)控制器的對(duì)象

     2. self.viewControllers.count 代表在導(dǎo)航控制器里面的控制器個(gè)數(shù)

     3. self 在這里代表 單個(gè)控制器里面的self.navigationController

}

技術(shù)點(diǎn)9:如何消除tabView 左邊有空格的問(wèn)題???

方法如下:

消除左邊空格的影響
- (void)viewDidLoad {
[super viewDidLoad];

if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
    
    [self.tableView setSeparatorInset:UIEdgeInsetsZero];
}

if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    
        [self.tableView setLayoutMargins:UIEdgeInsetsZero];
    }

}

- (void)tableView:(UITableView *)tableView willDisplayCell:  (UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
 {
      if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
     
         [cell setSeparatorInset:UIEdgeInsetsZero];
     }

      if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    
      [cell setLayoutMargins:UIEdgeInsetsZero];
    }
}

技術(shù)10:怎么把一個(gè)一個(gè)方法封裝起來(lái)???

分析:下面是一個(gè)方法

-(UIBarButtonItem *)setbutton:(NSString *)backImage BackHighlightedImage:(NSString *)backHighlightedImage action:(SEL)action
{

   UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

   [button addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];

   [button setBackgroundImage:[UIImage imageNamed:backImage] forState:UIControlStateNormal];

   [button setBackgroundImage:[UIImage imageNamed:backHighlightedImage] forState:UIControlStateHighlighted];

    CGSize size = button.currentBackgroundImage.size;

    button.frame =CGRectMake(0, 0, size.width, size.height);

    return [[UIBarButtonItem alloc]initWithCustomView:button];
}

解決辦法:建一個(gè)類(lèi)進(jìn)行封裝 繼承于 NSObject ,分別聲明和實(shí)現(xiàn),把減號(hào)(-)改為加號(hào)(+);有坑:里面的SE不能實(shí)現(xiàn),解決辦法:把調(diào)用的控制器也傳進(jìn)來(lái)作為參數(shù)Target:(id)target ,注意里面方法選擇器的參數(shù)如何設(shè)置???

  • 如截圖:不要害怕,我只是改動(dòng)很小,看上面的解決辦法
封裝類(lèi)的.h 文件
封裝類(lèi)的.m文件
調(diào)用,僅僅把原來(lái)的self換成自定義的類(lèi)名

重點(diǎn)可以把上面的進(jìn)行建立分類(lèi),增加方法

增加分類(lèi)
  • 把建好的分類(lèi)導(dǎo)入到pch文件里面(再調(diào)用的話就不再用類(lèi)名了,而是UIBarButtonItem)
建立分類(lèi)之后的調(diào)用

技術(shù)點(diǎn)11.怎么設(shè)置導(dǎo)航欄右上角字體的顏色??

  • 分析:系統(tǒng)默認(rèn)渲染成藍(lán)色。要想設(shè)置我們所需要的顏色需要尋找方法。
  • 解決辦法:正常狀態(tài)下咱們根據(jù)需要設(shè)置顏色,如果在點(diǎn)擊設(shè)置應(yīng)該是organge顏色。因?yàn)?strong>需要設(shè)置主題色,所以就在導(dǎo)航欄里面設(shè)置所有的字體顏色,下面的方法放在導(dǎo)航控制器的.m里面
改變之前的字體顏色
設(shè)置顏色之后未點(diǎn)擊時(shí)的字體顏色
設(shè)置顏色之后在點(diǎn)擊的時(shí)候顏色
/*

 設(shè)置導(dǎo)航欄文字的顏色以及文字大?。ㄈ鐚?dǎo)航的背景顏色,以及導(dǎo)航欄中間字體的顏色)
 [UINavigationBar appearance];
 設(shè)置Item的樣式
 [UIBarButtonItem appearance];

*/

//在第一次使用調(diào)用一次(tabBar的個(gè)的控制器navigationController寫(xiě)下面的方法)
+(void)initialize
{
    //設(shè)置整個(gè)項(xiàng)目所有item的主題樣式()
    UIBarButtonItem *item = [UIBarButtonItem appearance];

    //設(shè)置普通狀態(tài)的字體顏色和大小

    NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];

    textAttrs[NSForegroundColorAttributeName] = CWColor(123, 123, 123);

     textAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:22];

     [item setTitleTextAttributes:textAttrs forState:UIControlStateNormal];

     //設(shè)置點(diǎn)擊的時(shí)候顏色和大小
     NSMutableDictionary *textAttrsSeleced = [NSMutableDictionary dictionary];

     textAttrsSeleced[NSForegroundColorAttributeName] = CWColor(252, 108, 8);

     textAttrsSeleced[NSFontAttributeName] = [UIFont systemFontOfSize:22];

     [item setTitleTextAttributes:textAttrsSeleced forState:UIControlStateSelected];

 }
  • 以字典的形式書(shū)寫(xiě)出來(lái)更好,也更方便


    上面的設(shè)置顏色和大小可以這樣設(shè)置更簡(jiǎn)潔

技術(shù)點(diǎn)12:有關(guān)顏色的問(wèn)題(講解)

  • 顏色的分類(lèi):每一種像素都有自己的顏色,每一種顏色都可以由RGB3色組成,十六進(jìn)制由4個(gè)二進(jìn)制組成

  • (1)12bit顏色:#f00(代表紅) #0f0 #ff0 3*4 十六進(jìn)制(每一個(gè)一組)

  • (2)24bit顏色:#ff0000 #ffff00 #000000 #ffffff 3*8 十六進(jìn)制(每?jī)蓚€(gè)一組)

  • (3)32bit顏色(RGB):(下面是一個(gè)紅) 4*8 最后另個(gè)數(shù)字是透明度
    指定的RGB顏色
    #define CWColor(r,g,b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0];

    //隨機(jī)色(配合上面的的使用)
     #define CWRandomColor  CWColor(arc4random_uniform(256),arc4random_uniform(256),arc4random_uniform(256))
    

技術(shù)點(diǎn)13.自定義NSLog

  • 分析:在開(kāi)發(fā)項(xiàng)目時(shí),我們常常喜歡測(cè)試,會(huì)設(shè)置很多的NSLog,問(wèn)題來(lái)了,在項(xiàng)目結(jié)束的時(shí)候會(huì)有很多的NSLog,如何一個(gè)一個(gè)的去關(guān)閉太麻煩,如果不關(guān)閉大家知道打印是很消耗性能的,下面我們就自定義NSLog.

  • 解決問(wèn)題:我們?cè)陂_(kāi)發(fā)程序的過(guò)程中都是處在Debug模式,而在項(xiàng)目上線之后處在Release模式

程序開(kāi)發(fā)階段

Pch文件里面寫(xiě)上

   #ifdef DEBUG //處于開(kāi)發(fā)階段
   #define CWLog(...) NSLog(__VA_ARGS__)
   #else //處于發(fā)布階段(沒(méi)有輸出
   #define CWLog(...)
   #endif
自定義NSLog,提高運(yùn)算的性能

技術(shù)14.如何在導(dǎo)航欄上設(shè)置一個(gè)搜索框??哪種方法最好???

  • 最終效果圖
最終效果圖
  • 能夠擁有輸入框的目前為止我們經(jīng)常用的有UITextField和UISearchBar以及UITextView三種
    解釋?zhuān)?/strong>(只要是繼承于UIControl)
  • 1.UITextFiled是在此比較好的輸出入框,因?yàn)樗切∥谋据斎?,設(shè)置多樣化,很多的屬性
  • 2.UISearchBar也很好,屬性較少,限制太多,無(wú)法把??放到左邊,總之它也很好,主要是搜索框
  • 3.UItextView是大文本的輸入,不適合搜索

選擇第一種的代碼:(imageVIew一定要設(shè)置frame,圖片一定要放到左邊且contentMode圖片居中)

UITextField  *searchBar = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 300, 30)];

searchBar.backgroundColor = [UIColor grayColor];

//搜索框字體的大小以及搜索的提示語(yǔ)
searchBar.font = [UIFont systemFontOfSize:15];

searchBar.placeholder = @"請(qǐng)輸入搜索條件";

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];

//圖片靠左又居中**(imageView沒(méi)有發(fā)生變化變化的是image的大小)**
imageView.contentMode = UIViewContentModeCenter;

imageView.image = [UIImage imageNamed:@"searchbar_second_textfield_search_icon"];

searchBar.leftView = imageView;
//始終放到左邊
searchBar.leftViewMode = UITextFieldViewModeAlways;
邊框的模式
searchBar.borderStyle = UITextBorderStyleRoundedRect;

[searchBar addTarget:self action:@selector(change) forControlEvents:UIControlEventEditingChanged];
//設(shè)置為導(dǎo)航欄的titleView
self.navigationItem.titleView = searchBar;

技術(shù)15.設(shè)置一張圖片有沒(méi)有尺寸的兩種方式(imageView)

圖片的設(shè)置兩種方式
  第一種方式:通過(guò)initWithImage來(lái)創(chuàng)建初始化UIImage,UIImageView的尺寸就等于image的尺寸
    UIImage *image = [UIImage imageNamed:@"圖片的名字"];

    UIImageView *imageView = [[UIImageView alloc]initWithImage:image];

  第二種方式:通過(guò)init來(lái)創(chuàng)建絕大部分控件,控件都是沒(méi)有尺寸

    UIImageView *imageview = [[UIImageView alloc]init];//建議在此設(shè)置CGRectmake()

    imageview.image = [UIImage imageNamed:@"圖片的名字"];

技術(shù)16.怎么設(shè)置微博首頁(yè)的點(diǎn)擊下拉菜單??如下

設(shè)置下拉菜單
  • 解決辦法
    分析:能點(diǎn)擊說(shuō)明是button(也可以添加手勢(shì))
    下面以button為例:

    -(void)setNavigationTitle
    {
     //中間的標(biāo)題按鈕
      button = [[UIButton alloc]init];//等于 UIButton *button = [UIButton   buttonWithType:UIButtonTypeCustom];
      button.frame =CGRectMake(0, 0, 150, 35);
    
      //設(shè)置圖片和文字
     [button setTitle:@"首頁(yè)" forState:UIControlStateNormal];
     [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
     button.titleLabel.font = [UIFont boldSystemFontOfSize:22];
     [button setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 60)];
    
     [button setImage:[UIImage imageNamed:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
    [button setImageEdgeInsets:UIEdgeInsetsMake(0, 90, 0, 0)];
    
    //監(jiān)聽(tīng)下拉菜單
    [button addTarget:self action:@selector(clickTitle) forControlEvents:UIControlEventTouchUpInside];
    
    self.navigationItem.titleView = button;
    
    }
    
    -(void)clickTitle
    {
    
      //如果圖片的某個(gè)方向不規(guī)則,比如有突起,那么這個(gè)方向就不能拉伸
    
     UIImageView *dropdownMenu = [[UIImageView alloc]init];
    
     dropdownMenu.image = [UIImage imageNamed:@"popover_background"];
    
     dropdownMenu.frame = CGRectMake(80, 50, 200, 300);
    
     //[self.view.window addSubview:dropdownMenu];//self.view.window = [UIApplication sharedApplication].keyWindow;
    
     [[UIApplication sharedApplication].keyWindow addSubview:dropdownMenu];
    

}

  • 獲取窗體window的方式(用window是為了防止點(diǎn)擊首頁(yè)跳出框被tabView的影響)

self.view.window = [UIApplication sharedApplication].keyWindow;

  • 在此強(qiáng)烈推薦使用后者,因?yàn)楹笳哂肋h(yuǎn)有值,而前者不靠譜

  • 獲得window的方式:
    UIWindow *window = [UIApplication sharedApplication].keyWindow;

  • 此做法可能會(huì)被鍵盤(pán)影響

技術(shù)點(diǎn)17.如何讓一個(gè)視圖或者其他東西永遠(yuǎn)處在視圖的最上面,不被其他視圖影響??

  • 分析:首先要了解一個(gè)程序可以創(chuàng)建無(wú)數(shù)個(gè)window,如何獲取當(dāng)前最上面的window,方法如下:(技術(shù)16中的兩種方式均不太靠譜)
    獲取window的三種方式(最后一種最靠譜)
    UIWindow *window = self.view.window ;
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    UIWindow *window = [[UIApplication sharedApplication].windows lastObject];

效果:可以保持我們所期望的在最上面,也可以避免鍵盤(pán)的影響

技術(shù)點(diǎn)18.如何讓出了跳出來(lái)的框框之外其他的地方都不可點(diǎn)擊???

處理前
  • 分析:這是一個(gè)tabView,導(dǎo)航欄還有兩個(gè)按鈕,他們都可以被動(dòng),怎么避免彈出小窗口而其他地方不可點(diǎn)擊或者不可動(dòng)

  • 解決辦法:加一層“蒙版”,沒(méi)有那么神秘,就是一個(gè)view,frame等于窗體bounds,顏色clean,把小窗口和其他視圖隔開(kāi)

  • 處理代碼:(點(diǎn)擊首頁(yè),先顯示蒙板,再顯示小窗口,這樣,小窗口里面的東西才可以點(diǎn)擊)

       //獲取到最后面的window
      UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
    
      window.backgroundColor = [UIColor brownColor];
    
      UIView *cover = [[UIView alloc]init];
    
      cover.frame = window.bounds;
    
      [window addSubview:cover];
    
      //如果圖片的某個(gè)方向不規(guī)則,比如有突起,那么這個(gè)方向就不能拉伸
    
      UIImageView *dropdownMenu = [[UIImageView alloc]init];
    
      dropdownMenu.image = [UIImage imageNamed:@"popover_background"];
    
      dropdownMenu.frame = CGRectMake(80, 50, 200, 300);
    
     //[self.view.window addSubview:dropdownMenu];//self.view.window = [UIApplication sharedApplication].keyWindow;
    
      [cover addSubview:dropdownMenu];
    
window遮蓋了其他的一切
不能左右拉伸
  • 只需要把顏色設(shè)置為clean就好了,就能獲得上面的圖形,二其他地方就不能點(diǎn)擊了
 window.backgroundColor = [UIColor clearColor];
  • 特別說(shuō)明:想在框框dropdownMenu添加?xùn)|西只需要 addSubview,還需要注意的是dropdownMenu(UIIMageView的對(duì)象)不可交互

技術(shù)19.如何封裝一個(gè)菜單欄???(像上面的一樣,點(diǎn)擊首頁(yè)跳出)

  • 分析:把菜單欄放在蒙板上,封裝蒙板就好了,蒙板繼承于UIView
  • 解決辦法:建一個(gè)CWDropDownMenu類(lèi)繼承與UIView進(jìn)行封裝

具體的我會(huì)把封裝放到github

技術(shù)20.如何獲取一個(gè)視圖的最大y值或者x值???

解決辦法:

    CGRectGetMaxX(view.frame)   獲取視圖的最大x值
    CGRectGetMaxY(view.frame)   獲取視圖的最大y值
獲取一個(gè)視圖的尺寸的方法

技術(shù)20.如何轉(zhuǎn)換坐標(biāo)???(針對(duì)是view)(下面的如果toView:nil)nil代表window

分析:明確一個(gè)東西frame,一個(gè)控件的frame是相對(duì)于父視圖來(lái)說(shuō)的

坐標(biāo)轉(zhuǎn)換圖
  • 思路:在默認(rèn)的情況下,frame是以父控件左上角為坐標(biāo)原點(diǎn),bounds是以自身的(0,0)為坐標(biāo)原點(diǎn)的

  • 下面是三個(gè)視圖的坐標(biāo)代碼(普通控制器上面寫(xiě)的代碼)

    //1.blue
    self.blue = [[UIView alloc]initWithFrame:CGRectMake(0, 50, 300, 300)];
    self.blue.backgroundColor = [UIColor blueColor];
    [self.view addSubview:self.blue];
    //2.red
    self.red = [[UIView alloc]initWithFrame:CGRectMake(100, 150, 100, 100)];
    self.red.backgroundColor = [UIColor redColor];
    [self.blue addSubview:self.red];
    //3.yellow
    self.yellow = [[UIView alloc]initWithFrame:CGRectMake(20, 30, 50, 50)];
    self.yellow.backgroundColor = [UIColor yellowColor];
    [self.red addSubview:self.yellow];
    
  • 現(xiàn)在我們改變黃色視圖的坐標(biāo)(兩種方法一樣)

  • 只需要記?。?.這是在計(jì)算yellow這個(gè)控件在相對(duì)于red上面的位置和尺寸
    CGRect newRect1 = [self.yellow convertRect:self.yellow.bounds toView:self.red];

    CGRect newRect2 = [self.yellow.superview convertRect:self.yellow.frame toView:self.red];
    
  • 下面是輸出:

     NSLog(@"%@",NSStringFromCGRect(newRect1));
    
     NSLog(@"%@",NSStringFromCGRect(newRect2));
    
    
     相對(duì)于自身的輸出
     NSLog(@"%@",NSStringFromCGRect(self.yellow.bounds));
     相對(duì)于父視圖的輸出
     NSLog(@"%@",NSStringFromCGRect(self.yellow.frame));
    
  • 2.這是在計(jì)算magenta相對(duì)于button1的位置坐標(biāo)和尺寸(輸出的表示和上面的一樣)

    CGRect rectNew1 = [self.button1 convertRect:self.magenta.bounds fromView:self.magenta];
    

技術(shù)點(diǎn)21.當(dāng)我們點(diǎn)擊某一個(gè)button的時(shí)候跳出來(lái)一個(gè)提示框并且提示框下面還有一個(gè)蓋板,此時(shí)如何消除我們的提示框???

分析:此時(shí)我們發(fā)現(xiàn)點(diǎn)擊任何地方都沒(méi)有反應(yīng),不過(guò)有一個(gè)觸屏方法touch我們沒(méi)有用

  -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
  {
       [self dismiss];
  }

 -(void)dismiss
 {
       [self removeFromSuperview];
 }

解決辦法:
1.點(diǎn)擊提示框以外會(huì)調(diào)用touch,我們調(diào)用移除dismiss即可
2.給蓋板view添加手勢(shì),讓其點(diǎn)擊消失調(diào)用dismiss

  • 重點(diǎn):touchesBegan 這個(gè)方法只針對(duì)最底層的view來(lái)用,而不是其他的視圖的touches

技術(shù)22.如何設(shè)置微博下面的加號(hào)???給大家封裝好了

添加加號(hào)
  • 分析:加號(hào)到底是什么?如何設(shè)置??以及點(diǎn)擊加號(hào)之后又會(huì)發(fā)生什么???
    解決辦法:

    不能把加號(hào)設(shè)置成一個(gè)控制器原因:浪費(fèi)對(duì)象,加號(hào)的位置不好布局

    具體的布局以及用法請(qǐng)下載我的封裝

技術(shù)23.如何讓時(shí)間在一個(gè)界面一直顯示而且不斷地更新???

讓時(shí)間一直更新
  • 分析:時(shí)間一直更新的話需要不斷地刷新這個(gè)界面的時(shí)間設(shè)定,我們可以進(jìn)入這個(gè)界面就設(shè)置定時(shí)器,不斷地去刷新這個(gè)時(shí)間設(shè)定(可以設(shè)定指定的時(shí)間做某些事情)
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];
label = [[UILabel alloc]initWithFrame:CGRectMake(20, 200, 300, 50)]//聲明全局
label.backgroundColor = [UIColor whiteColor];
[self.view addSubview:label];

-(void)updateTime
{

NSDate *date = [NSDate dateWithTimeIntervalSinceNow:10*60];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];

[dateFormatter setDateFormat:@"yyyy年MM月dd日 HH:mm:ss"];

label.text = [dateFormatter stringFromDate:date];

if ([label.text  isEqual: @"2016年06月09日 02:41:00"]) {
    
    //在此可以設(shè)定指定的時(shí)間做某些事情
  }
}

技術(shù)24.版本特性指什么??四舍五入(int)(number+0.5)(只適用1位小數(shù))

  • 分析:版本顧名思義就是程序的新版本,也可以理解為首頁(yè)登錄的導(dǎo)航圖

  • 具體的做法,進(jìn)行了封裝。存到github上面了,可以查看,稍后附上鏈接

里面會(huì)涉及到四舍五入(只適用1位小數(shù)),具體的做法是,四舍五入:加0.5再?gòu)?qiáng)轉(zhuǎn),如(int)(number+0.5)

舉個(gè)例子:

原數(shù)        加0.5     求和      舍去小數(shù)(得到四舍五入的數(shù)字)
    
 1.3     1.3+0.5     =    1.8        1
 1.5     1.5 +0.5    =    2.0        2
 1.6     1.6 + 0.5   =    2.1        2
 0.7     0.7 + 0.5   =    1.2        1

四舍五入(只適用1位小數(shù)) 如果是1.66 ,則(1.66+0.5)*10取整,再取一位小數(shù),再按照上面的

技術(shù)25.如果發(fā)現(xiàn)一個(gè)控制器添加到另外一個(gè)控制器,但是它的數(shù)據(jù)卻沒(méi)有了?怎么解決??那么把一個(gè)控制器添加到另外一個(gè)控制器又有什么價(jià)值呢???

  • 分析:極大可能是因?yàn)榭刂破鞅惶崆颁N(xiāo)毀了(俗稱(chēng)程序控制器壞死)

解決辦法:需要定義下面的控制器屬性

 先定義    
@property(nonatomic,strong)MeasageViewController *measageViewController;
再懶加載
-(MeasageViewController *)measageViewController
{

if (!_contactViewController) {
    
    _measageViewController = [[MeasageViewController alloc]init];
    
    _measageViewController.view.frame = self.view.frame;
}

    return _measageViewController;

}

最后在viewDidLoad 添加就好了

  • 需要注意的地方:控制器的view還在,但是view上面的數(shù)據(jù)不顯示,極大可能是因?yàn)榭刂破鞅惶崆颁N(xiāo)毀了
  • 1.一個(gè)控制器的view是可以隨意調(diào)整尺寸和位置的
  • 2.一個(gè)控制器的view是可以隨意添加到其他view中
  • 3.如果將一個(gè)控制器的view,添加到其他view中顯示,那么要想辦法保證不被銷(xiāo)毀
  • 4.原則:只要view在,view所在的控制器必須的在,這樣才能保證view內(nèi)部的數(shù)據(jù)和業(yè)務(wù)邏輯正常

技術(shù)26:關(guān)于圖片的一些設(shè)置以及加載方式‘

解析:

程序啟動(dòng)會(huì)自動(dòng)加載叫做Default.png的圖片
3.5inch retain 屏幕:Default@2x.png
3.5inch 非retain屏幕:Default.png
4.0inch retain 屏幕:Default-568h@2x.png

只有程序啟動(dòng)時(shí)自動(dòng)去加載的圖片才會(huì)查找-568h@2x.png

技術(shù)27.點(diǎn)擊切換一個(gè)Button兩種狀態(tài)下的圖片

分析:效果圖

點(diǎn)擊前的圖片

點(diǎn)擊后的圖片
  • 解決辦法:設(shè)置兩張圖片,分別為選中UIControlStateSelected和未選中下UIControlStateNormal

比如下面的代碼:

  UIButton  *_shareBtn = [[UIButton alloc]init];
  _shareBtn.frame = CGRectMake(CWKWindowWidth*(KImageCount-1)+CWKWindowWidth*0.5-93,CWKWindowHeight*0.7, 186, 42.5);
  [_shareBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [_shareBtn setImage:[UIImage imageNamed:@"unchecked_checkbox"] forState:UIControlStateNormal];
  [_shareBtn setImage:[UIImage imageNamed:@"checked_checkbox"] forState:UIControlStateSelected];
  [_shareBtn setTitle:@"分享" forState:UIControlStateNormal];
  [_shareBtn addTarget:self action:@selector(shareClick:) forControlEvents:UIControlEventTouchUpInside];

 -(void)shareClick:(UIButton *)shareBtn
 {
     shareBtn.selected = !shareBtn.isSelected;
 }
  • 重點(diǎn)代碼:shareBtn.selected = !shareBtn.isSelected;

技術(shù)28. 如何讓圖片和分享這兩個(gè)字有一定的距離??

分析:在button上面加載圖片用image,而button上面覆蓋圖片用backgroundImage,在此要用到titleEdgeInsets這個(gè)屬性,用法如下:

1728484-2cf3b340b3975375.png
  • 具體的用法(有關(guān)button里面三種屬性的用法,以及區(qū)別)

    //1.contentEdgeInsets:(自切:切除的就不能用了,也就是不能放東西)會(huì)影響按鈕內(nèi)部的所有內(nèi)容(里面的imageView和titleLabel)
    //切多少就有多少不能被用,相當(dāng)于留出多余的面積
    //button.contentEdgeInsets = UIEdgeInsetsMake(10, 0, 0, 0);

    //2.titleLabelEdgeInsets 只影響按鈕內(nèi)部的titleLabel

    button.titleEdgeInsets = UIEdgeInsetsMake(5,20, 0, 0);

    //3.imageEdgeInsets 只影響按鈕內(nèi)部的imageView

    button.imageEdgeInsets = UIEdgeInsetsMake(20,0, 0, 50);

技術(shù)29.一個(gè)空間看不見(jiàn)的可能性有哪些???

  • 分析:如下可能性很多
 /*
 * 1.根本沒(méi)有創(chuàng)建實(shí)例化這個(gè)控件
 *
 * 2.沒(méi)有設(shè)置尺寸 UIPageControl沒(méi)設(shè)置尺寸也會(huì)出來(lái)
 *
 * 3.控件的顏色可能跟父控件的顏色一樣
 *
 * 4.控件的透明度為alpha <= 0.01;
 *
 * 5.hidden = YES 
 *
 * 6.沒(méi)有添加到父控件中
 *
 * 7.這個(gè)控件被其他控件擋住了
 *
 * 8.位置不對(duì)(指坐標(biāo))
 *
 * 9.父控件發(fā)生了以上的情況
 *
 * 10.特殊情況:image設(shè)置了,但是圖片沒(méi)有設(shè)置,就無(wú)法顯示
 *
 * UIImageView沒(méi)有設(shè)置image屬性,或者設(shè)置的圖片名字不對(duì)
 * 
 * UILabel沒(méi)有設(shè)置文字,或者文字的顏色和父控件的顏色一樣
 *
 * UITextFiled沒(méi)有設(shè)置文字,或者沒(méi)有設(shè)置邊框樣式borderStyle
 *
 * UIPageControl沒(méi)有設(shè)置頁(yè)碼,不會(huì)顯示小圓點(diǎn)
 *
 * UIButton內(nèi)部imageView和titleLabel的frame被篡改了,或者imageView和titlleLabel沒(méi)有內(nèi)容
 *
 */

技術(shù)30.如何讓UITextView大文本輸入框一直可以顯示內(nèi)容且內(nèi)容一直會(huì)顯示最后一行的內(nèi)容?

大文本顯示框
  • 分析: 只需要讓文本內(nèi)容一直疊加換行。最主要的是顯示最后一行

定義三個(gè)全局的變量:

int count;
NSTimer *timer;
UITextView *textView;//之后執(zhí)行下面的

  {
     timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTime) userInfo:nil repeats:YES];

     count = 0;

     textView = [[UITextView alloc]initWithFrame:self.view.bounds];

     textView.font = [UIFont systemFontOfSize:25];

     [self.view addSubview:textView];

  }
  -(void)updateTime
  {

       count ++;

       NSLog(@"%d",count);

        NSString *text = textView.text;

        textView.text = [text stringByAppendingFormat:@"%d \n",count];

        NSRange range;
 
       range.length = textView.text.length;

       [textView scrollRangeToVisible:range];

   }

技術(shù)31.版本新特性如何設(shè)定??(也就是新手導(dǎo)航與版本更新)

版本新特性的走向
求版本的特性
  • 具體的代碼

    Appdelegate.m 里面
    //1.重寫(xiě)window
     self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    
     //2.設(shè)置根控制器
     //獲取上一次的使用版本 (儲(chǔ)存在沙盒中的版本號(hào))
    
    NSString *lastVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"CFBundleVersion"];
     //當(dāng)前軟件的版本號(hào)(從info.plist中獲取)兩種寫(xiě)法
    
     //1.NSString *currentVersion =  [NSBundle mainBundle].infoDictionary[@"CFBundleVersion"];
    
     NSDictionary *info = [NSBundle mainBundle].infoDictionary;
     //當(dāng)前的version
     NSString *currentVersion = info[@"CFBundleVersion"];
    
     NSLog(@"%@",currentVersion);
    //只要不相等就是新特性
    if ([lastVersion isEqualToString:currentVersion]) {//版本號(hào)相同:這次打開(kāi)和上次打開(kāi)始同一個(gè)版本
     
            self.window.rootViewController = [[RootTabBarController alloc]init];
    }
    else//這次打開(kāi)的版本和上次不一樣,顯示新的特性
    {
          //將當(dāng)前的版本號(hào)存進(jìn)沙盒
      
          [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"CFBundleVersion"];
     
         //立馬把版本號(hào)存進(jìn)去.不可少,少了可能出問(wèn)題
         [[NSUserDefaults standardUserDefaults] synchronize];//synchronize |?s??kr?na?z| 使同步,使同時(shí)發(fā)生
     
         self.window.rootViewController = [[NewViewController alloc]init];
    }
    //3.顯示window
    [self.window makeKeyAndVisible];
    

    //在新特性控制器里面 (點(diǎn)擊button走這里)

    -(void)clickNewController
    {
      //    //獲取到應(yīng)用程序的delegate
      //    AppDelegate *delegate = [UIApplication sharedApplication].delegate;
      //    [delegate startChange];
    
      /*切換控制器的手段
        *
        * 1.push :依賴(lài)于UINavigationController,控制器的切換是可逆的,比如A切換到B,B又可以回到A
        *
        * 2.model:控制器的切換是可逆的,比如A切換到B,B又可以回到A,而且新特性又不可釋放,占據(jù)內(nèi)存
        *
        * 3.切換window的rootController,而且不可逆,且新特性的控制器被銷(xiāo)毀
        *
        */
    
       UIWindow *window = [UIApplication sharedApplication].keyWindow;
    
       window.rootViewController = [[RootTabBarController alloc]init];
    
    }
    

技術(shù)32.微博數(shù)據(jù)請(qǐng)求的一些要求???

 什么樣的應(yīng)用才有資格被用戶(hù)授權(quán)?
 1.注冊(cè)一個(gè)新浪微博賬號(hào),成為新浪的開(kāi)發(fā)者,
 2.登錄開(kāi)發(fā)者主頁(yè)http://open.weibo.com/,創(chuàng)建一個(gè)應(yīng)用
 3.創(chuàng)建完成后,會(huì)獲得以下主要信息
 1>AppKey:應(yīng)用的唯一標(biāo)識(shí),相當(dāng)于應(yīng)用的身份證
 2>APPsecret:
 3>RedirectURI(回調(diào)地址)

技術(shù)33.OAuth授權(quán)步驟

  • 第三方想訪問(wèn)服務(wù)提供商的用戶(hù)資源時(shí),需要先進(jìn)行OAuth授權(quán)

  • OAuth授權(quán)的步驟總結(jié)就3點(diǎn):

  • 1.獲取未經(jīng)授權(quán)的Request Token

  • 2.獲取用戶(hù)授權(quán)的Request Token

  • 3.用戶(hù)授權(quán)的Request Token換取 Access Token(授權(quán)標(biāo)記)
    (得到這個(gè)Access Token 就相當(dāng)于得到了一個(gè)“令牌”,通過(guò)此“令牌”請(qǐng)求,就可以去擁有資源的網(wǎng)站抓取任意有權(quán)限可以被抓取的資源)

  • 對(duì)上面的解釋

第一個(gè)解釋
步驟二的講解

下面是具體的步驟:

第一步

第二步

第三步

技術(shù)34.請(qǐng)求出現(xiàn)的錯(cuò)誤(分析)

表示參數(shù)傳錯(cuò)了
  • 分析:這種問(wèn)題表示參數(shù)傳錯(cuò)了或者是沒(méi)有傳參數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,750評(píng)論 1 14
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,987評(píng)論 1 9
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 新修的高速路又寬又直,路中央的花壇里,盛開(kāi)著移植來(lái)的各種鮮花。望著車(chē)窗外閃過(guò)的一座座高樓大廈,蓮子驚異地發(fā)覺(jué),這座...
    夢(mèng)谷閱讀 299評(píng)論 3 1
  • 在網(wǎng)上看到這么一句話,“讓你哭到撕心裂肺的那個(gè)人,是你最?lèi)?ài)的人;讓你笑到?jīng)]心沒(méi)肺那個(gè)人,是最?lèi)?ài)你的人。”這名話讓我...
    的確良閱讀 277評(píng)論 0 0

友情鏈接更多精彩內(nèi)容