iOS 7 UIBar ปุ่มลูกศรย้อนกลับปุ่มสี


172

ฉันกำลังพยายามเปลี่ยนปุ่มลูกศรย้อนกลับ

ป้อนคำอธิบายรูปภาพที่นี่

ขณะนี้ฉันใช้สิ่งต่อไปนี้เพื่อควบคุมขนาดตัวอักษรรวมถึงสีตัวอักษรบนปุ่มย้อนกลับ:

[[UIBarButtonItem appearance] setTitleTextAttributes:
  [NSDictionary dictionaryWithObjectsAndKeys:
    [UIColor whiteColor], UITextAttributeTextColor,
    [UIFont boldSystemFontOfSize:16.0f], UITextAttributeFont,
    [UIColor darkGrayColor], UITextAttributeTextShadowColor,
    [NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset,
  nil] forState:UIControlStateNormal];

แต่ถ้าฉันต้องการเปลี่ยนเฉพาะสีของลูกศรสำหรับปุ่มย้อนกลับฉันควรทำอย่างไร


คุณพบวิธีแก้ไขสีลูกศรสำหรับปุ่มย้อนกลับแล้วหรือยัง
OnkarK

1
@OMK ฉันลงเอยด้วยการเปลี่ยน infolistproperty NavBarColor เพื่อให้มันใช้งานได้จากนั้นตั้งค่า navbarcolor ที่แท้จริงให้เป็นสีอื่น ฉันไม่แน่ใจว่าเกิดอะไรขึ้น แต่วิธีการแก้ปัญหานี้ใช้ได้ผลสำหรับฉัน
kevinl

1
พฤติกรรมจากคุณสมบัติบางอย่างของUINavigationBarมีการเปลี่ยนแปลงจาก iOS 7 ลองดูที่คำตอบเพื่อดูผลกระทบของคุณสมบัติอื่น ๆด้วย
Bhavin

โปรดช่วยด้วยปัญหานี้: stackoverflow.com/questions/29923813/ …
MIlošKresović

คำตอบ:


438

ในการเปลี่ยนสีปุ่มเชฟรอนสำหรับตัวควบคุมการนำทางเฉพาะ *:

self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

* หากคุณใช้แอพที่มีตัวควบคุมการนำทางมากกว่า 1 ตัวและคุณต้องการให้สีแบบบั้งนี้ใช้กับแต่ละสีคุณอาจต้องการใช้พร็อกซีลักษณะที่ปรากฏเพื่อตั้งค่าปุ่มบั้งหลังสำหรับตัวควบคุมการนำทางทุกตัวดังนี้

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

และสำหรับการวัดที่ดีอย่างรวดเร็ว (ขอบคุณ Jay Mayu ในความคิดเห็น):

UINavigationBar.appearance().tintColor = UIColor.whiteColor()

3
การดำเนินการนี้จะใช้ได้ตลอดทั้งแอพหากคุณใช้คอนโทรลเลอร์การนำทางเดียวกันสำหรับแอปทั้งหมด ฉันแนะนำข้อเสนอแนะของ Bart จริงๆ
Kyle Clegg

1
ฉันอัปเดตคำตอบของฉันพร้อมด้วยหมายเหตุเกี่ยวกับตัวควบคุมทิศทางหลายตัว ฉันยังไม่เห็นด้วยว่าคำแนะนำของ Bart คือคำตอบที่ "ถูกต้อง" เพราะมีผลข้างเคียงอื่น ๆ มากมายเมื่อคุณตั้งค่าสีอ่อนของแอพทั้งหมด นอกจากนี้คำถามดั้งเดิมไม่ได้ถามว่าจะจัดธีมแอพทั้งหมดอย่างไรเพียงแค่ถามว่าจะจัดธีมปุ่มย้อนกลับได้อย่างไร
DiscDev

1
ดูเหมือนจะไม่ได้ตั้งค่าสีของรูปตัววีด้านหลัง
jcampbell1

2
@ jcampbell1 - ฉันใช้สิ่งนี้ในหลาย ๆ แอปของฉันเรียบร้อยแล้ว ... บางทีคุณอาจไม่ได้อ่านข้อแม้เกี่ยวกับ UINavigationControllers หลาย ๆ ตัว
DiscDev

7
for swiftUINavigationBar.appearance().tintColor = UIColor.whiteColor()
Jay Mayu

57

คุณต้องตั้งค่า tintColor ของแอพทั้งหมด

self.window.tintColor = [UIColor redColor];

หรือใน Swift 3:

self.window?.tintColor = UIColor.blue

ที่มา: คู่มือการเปลี่ยน iOS 7 UI


4
หากคุณต้องการตั้งค่าสีของเครื่องหมายบั้งปุ่มย้อนกลับ (ไม่ใช่แอพทั้งหมด) ตามที่ระบุไว้ในคำถามเดิมนี่เป็นคำตอบที่ผิด ดูคำตอบของฉันที่นี่เพื่อหาคำตอบที่ถูกต้อง: stackoverflow.com/a/18809412/1103584
DiscDev

ฉันใช้สิ่งนี้ในตัวแทนแอพของฉันเพื่อเปลี่ยนปุ่มย้อนกลับเป็นสีดำ วางในเมธอด applicationDidFinishLaunchingWithOptions ... window.tintColor = [UIColor blackColor];
Marc Watson

สิ่งนี้ใช้ไม่ได้กับ iOS 6 มีคนรู้ว่าต้องทำอย่างไร
Gavjr

1
สิ่งนี้ทำให้มีผลกับ tintColor ของแอปทั้งหมดซึ่งรวมถึง UIActivityViewController ใด ๆ (สำหรับการแบ่งปัน) และ MFMailComposeViewViewController (สำหรับการส่งอีเมล) กล่องโต้ตอบเหล่านั้นถือว่า tintColor ไม่ได้รับการแก้ไขด้วย .... และอาจส่งผลให้เกิดการโต้ตอบสีที่น่าเกลียด
Mike Lambert

นี้จะเปลี่ยนสีสีของวัตถุอื่น ๆ UITextFieldอีกมากมายเช่นเคอร์เซอร์กระพริบใน ไม่แนะนำอย่างแน่นอน
Hunter Monk

55

คุณสามารถตั้งค่าสีบนแถบการนำทางของแอปทั้งหมดโดยใช้วิธีการ

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions{
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}

23

เป็นไปได้ที่จะเปลี่ยนเฉพาะสีของลูกศร (ไม่ใช่สีของชื่อปุ่มย้อนกลับ) ด้วยวิธีนี้:

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor blackColor]];

แถบการนำทางประกอบด้วยมุมมองย่อยของประเภท _UINavigationBarBackIndicatorView (รายการสุดท้ายในอาร์เรย์ subviews) ซึ่งแสดงถึงลูกศร

ผลลัพธ์คือแถบการนำทางที่มีสีต่าง ๆ ของปุ่มลูกศรย้อนกลับและชื่อปุ่มย้อนกลับ


4
ขึ้นอยู่กับลำดับของการดูย่อยของมุมมองระบบเป็นความคิดที่ไม่ดี
Glenn Maynard

2
สิ่งนี้ทำงานได้เมื่อตั้งค่า self.navigationController.navigationBar.tintColor ไม่ทำงาน
Rich Fox

@GlennMaynard คุณถูกต้อง - วิธีที่ดีที่สุดในการดำเนินการนี้คือการย้ำผ่านอาร์เรย์ของการดูย่อยที่ส่งคืนโดยself.navigationController.navigationBar.subviewsจนกว่าจะพบปุ่มย้อนกลับ
Evan R

@EvanR ในขณะที่วิธีการแก้ปัญหาของ selmad ทำงานได้สำหรับฉันการวนซ้ำผ่าน subviews นั้นไม่ได้ทำ (ซึ่งฉันลองก่อนเพราะฉันเห็นด้วยกับคุณว่าควรทำเช่นนั้น) ถ้ามันเหมาะกับคุณ - โปรดเพิ่มตัวอย่าง ขอบคุณ
jungledev


11

ภายใน rootViewController ที่เริ่มต้น navigationController ฉันใส่รหัสนี้ในวิธีการของฉัน viewAppid:

//set back button color
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
//set back button arrow color
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];

2
UITextAttributeTextColor เลิกใช้แล้วใน iOS 7 - ใช้ NSForegroundColorAttributeName
amergin

7

ใน iOS 6 tintColor จะระบายสีพื้นหลังของแถบนำทางแถบแท็บแถบเครื่องมือแถบค้นหาและแถบขอบเขต ในการแต้มสีพื้นหลังของแถบใน iOS 7 ให้ใช้คุณสมบัติ barTintColor แทน

แหล่งข้อมูลการออกแบบ iOS 7 คู่มือการเปลี่ยน iOS 7 UI


2
นี่คือหนึ่ง! ... วางไว้ในตัวแทนแอพ ทำงานเหมือนจับใจ! window.tintColor = [UIColor blackColor]; // ฉันต้องการสีดำ
Marc Watson

6

คุณสามารถตั้งค่าtintColorคุณสมบัติบนปุ่ม (หรือรายการปุ่มบาร์) หรือมุมมองของตัวควบคุมมุมมอง โดยค่าเริ่มต้นคุณสมบัติจะสืบทอดสีจากมุมมองพาเรนต์จนถึงระดับสูงสุดUIWindowของแอปของคุณ


1
ขอบคุณสำหรับคำตอบ อย่างไรก็ตามมันใช้งานได้แตกต่างกันเล็กน้อยใน iOS 7 โค้ดเก่าของฉันใช้ tintColor แต่ iOS 7 ดูเหมือนจะไม่ชอบมันมากนัก ฉันลงเอยด้วยการใช้คู่มือการเปลี่ยนแปลงอย่างเป็นทางการของ Apple Dev iOS 7 เพื่อแก้ไขปัญหา UI บางอย่าง
kevinl

ดูคำตอบของฉันสำหรับตัวอย่างที่ไม่ต่อเนื่องของวิธีการทำเช่นนี้: stackoverflow.com/a/18809412/1103584
DiscDev

5

ฉันต้องใช้ทั้งสอง:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] 
                     setTitleTextAttributes:[NSDictionary 
               dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor,nil] 
                                   forState:UIControlStateNormal];

[[self.navigationController.navigationBar.subviews lastObject] setTintColor:[UIColor whiteColor]];

ขอบคุณสำหรับทุกคน!


5
UINavigationBar *nbar = self.navigationController.navigationBar;

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
   //iOS 7
   nbar.barTintColor = [UIColor blueColor]; // bar color
   //or custom color 
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

   nbar.navigationBar.translucent = NO;

   nbar.tintColor = [UIColor blueColor]; //bar button item color

} else {
   //ios 4,5,6
   nbar.tintColor = [UIColor whiteColor];
   //or custom color
   //[UIColor colorWithRed:19.0/255.0 green:86.0/255.0 blue:138.0/255.0 alpha:1];

}

ยิ่งใหญ่ มันช่วยฉัน ขอบคุณ
Yogesh Lolusare

4

อัปเดต Swift 3

navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.yellow
navigationController?.navigationBar.tintColor = UIColor.red
navigationController?.navigationBar.barTintColor = UIColor.gray
navigationController?.navigationBar.titleTextAttributes =  [NSForegroundColorAttributeName: UIColor.blue]

ผลลัพธ์: ป้อนคำอธิบายรูปภาพที่นี่


3

เพียงแค่เปลี่ยนNavigationBarสีคุณสามารถตั้งค่าสีอ่อนด้านล่าง

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

สิ่งนี้จะไม่ส่งผลต่อสีอ่อนใน iOS 7 ตามเอกสาร: "การตั้งค่าคุณสมบัติ tintColor โดยใช้ API พร็อกซีที่ปรากฏไม่รองรับ iOS 7" ลิงก์
bachonk

3

ในกรณีที่คุณสร้างปุ่มย้อนกลับที่กำหนดเองตาม UIButton พร้อมภาพลูกศรนี่เป็นตัวอย่างข้อมูลย่อย ใช้มันคุณสามารถสร้างปุ่มในรหัสหรือเพียงแค่กำหนดระดับใน Interface Builder ให้กับ UIButton ใด ๆ ลูกศรย้อนกลับรูปภาพจะถูกเพิ่มโดยอัตโนมัติและสีด้วยสีข้อความ

@interface UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color;

@end


@implementation UIImage (TintColor)

- (UIImage *)imageWithOverlayColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, self.size.width, self.size.height);

    if (UIGraphicsBeginImageContextWithOptions) {
        CGFloat imageScale = 1.0f;
        if ([self respondsToSelector:@selector(scale)])
            imageScale = self.scale;
        UIGraphicsBeginImageContextWithOptions(self.size, NO, imageScale);
    }
    else {
        UIGraphicsBeginImageContext(self.size);
    }

    [self drawInRect:rect];

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetBlendMode(context, kCGBlendModeSourceIn);

    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

@end




#import "iOS7backButton.h"

@implementation iOS7BackButton

-(void)awakeFromNib
{
    [super awakeFromNib];

    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:self.titleLabel.textColor];
    [self setImage:backBtnImage forState:UIControlStateNormal];
    [self setTitleEdgeInsets:UIEdgeInsetsMake(0, 5, 0, 0)];
    [self setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];


}


+ (UIButton*) buttonWithTitle:(NSString*)btnTitle andTintColor:(UIColor*)color {
    BOOL is6=([[[UIDevice currentDevice] systemVersion] floatValue] <7);
    UIButton *backBtn=[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 30)];
    UIImage *backBtnImage = [[UIImage imageNamed:@"backArrow"] imageWithOverlayColor:color];
    [backBtn setImage:backBtnImage forState:UIControlStateNormal];
    [backBtn setTitleEdgeInsets:UIEdgeInsetsMake(0, is6?5:-5, 0, 0)];
    [backBtn setImageEdgeInsets:UIEdgeInsetsMake(0, is6?0:-10, 0, 0)];
    [backBtn setTitle:btnTitle forState:UIControlStateNormal];
    [backBtn setTitleColor:color /*#007aff*/ forState:UIControlStateNormal];

    return backBtn;
}

@end

รูปปุ่มย้อนกลับ @ 2x


3

หากคุณต้องการเปลี่ยนเฉพาะลูกศรย้อนกลับ แต่ในแอพทั้งหมดให้ทำดังนี้

[[NSClassFromString(@"_UINavigationBarBackIndicatorView") appearance] 
  setTintColor:[UIColor colorWithHexString: @"#f00000"]];

มีโอกาสที่คุณจะถูกปฏิเสธจากแอปสโตร์
ลุค

@ ลุคฉันใช้มันสำเร็จหลายครั้งแล้ว ไม่มีการปฏิเสธ แต่ใช่มีโอกาสยังคงอยู่
orkenstein

ยังมีแนวโน้มว่าจะแตกในเวอร์ชั่น iOS ในอนาคต
Lope

1
@Lope ใช่ทำไมไม่ ฉันไม่ได้มองหากระสุนเงิน
orkenstein

การวนซ้ำผ่านหน้าจอย่อยบน iOS 10.1 แสดงว่ายังคงเป็นชื่อคลาส แต่การตั้งค่าลักษณะที่ปรากฏดังแสดงในที่นี้จะไม่มีผลกับฉัน
arlomedia

2

ใน iOS 7 คุณสามารถใส่รหัสต่อไปนี้application:didFinishLaunchingWithOptions:ในAppDelegate.mไฟล์ของคุณ:

[[UINavigationBar appearance] setTintColor:myColor];

ตั้งค่าmyColorเป็นสีที่คุณต้องการให้ปุ่มย้อนกลับแสดงตลอดทั้งแอพ ไม่จำเป็นต้องใส่ไว้ในทุกไฟล์


0

Swift 2.0:แถบสีและปุ่มนำทาง

navigationController?.navigationBar.barTintColor = UIColor.blueColor()
navigationController?.navigationBar.tintColor = UIColor.whiteColor()
navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

0

ใน swift 3 เพื่อเปลี่ยนสีลูกศรปุ่ม UIBarButton ย้อนกลับ

self.navigationController?.navigationBar.tintColor = UIColor.black
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.