การตั้งค่ารูปภาพ UIButton ส่งผลให้ปุ่มสีน้ำเงินใน iOS 7


163

บน iOS 6 SDK ฉันเขียนโค้ดบรรทัดต่อไปนี้เพื่อแสดงรูปภาพภายในปุ่ม:

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

แต่ตอนนี้ใช้ Xcode 5 และ iOS 7 แล้วมันไม่ทำงาน ปุ่มไม่มีภาพ ปุ่มเต็มไปด้วยสีน้ำเงิน


ภาพปรากฏขึ้นเมื่อคุณคลิกปุ่มหรือไม่?
JustAnotherCoder

คำตอบ:


378

ใน iOS7 มีปุ่มชนิดใหม่ที่เรียกว่า UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0), // ปุ่มระบบมาตรฐาน

ตรวจสอบไฟล์. xib ของคุณและเปลี่ยนประเภทปุ่มเป็นกำหนดเอง ดูภาพ

หากต้องการทำสิ่งนี้โดยทางโปรแกรมให้เพิ่มบรรทัดนี้ในviewDidLoad:

[UIButton buttonWithType:UIButtonTypeSystem]; 

2
[ปุ่ม UIButtonWithType: UIButtonTypeSystem];
ไร้ความปรานี

57
โปรดทราบว่าโซลูชันนี้จะลบสีอ่อนของระบบ แต่ยังส่งผลให้เกิดการเปลี่ยนแปลงอย่างหนักระหว่างสถานะที่เน้นและปกติ หากคุณต้องการรักษาลักษณะการทำงานของระบบภาพเคลื่อนไหว ฯลฯ แต่ต้องการกำจัดสีอ่อนให้ลอง[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];(โดยตั้งค่าประเภทปุ่มเป็น "ระบบ" ใน IB)
JWK

ขอบคุณสิ่งนี้มีประโยชน์มาก ในกรณีของเราปุ่มถูกตัดเป็นรูป PNG โปร่งใสแล้วแต้มสี
g_pass

Geezm พวกเขาซ่อนตัวไว้อย่างนั้นใช่มั้ย
Maury Markowitz

มันใช้งานได้ :) คุณอาจมีปัญหาอื่นในโค้ดของ ur ถ้าคุณดู Xcode 6.1 คุณจะเห็นตัวเลือกที่ใช้ได้อย่างชัดเจน ..
Chamira Fernando

53

ดูเหมือนว่า iOS 7 กำลังใช้รูปภาพที่จัดเตรียมไว้เพื่อใช้เป็นหน้ากากอัลฟ่าสำหรับแสดงสีโทนสีของปุ่ม การเปลี่ยนประเภทปุ่มUIButtonTypeCustomเป็นการหลอกลวงสำหรับฉัน (ขอบคุณ user716216!) การตั้งค่ารูปภาพเป็นพื้นหลังอาจไม่ทำงานหากคุณมีภาพพื้นหลังอยู่แล้วเหมือนกรณีของฉัน


ขอบคุณ! ผู้ใช้ดั้งเดิมลืมยอมรับว่าเป็นคำตอบ
jigzat

มันใช้งานได้สำหรับฉัน แต่เปลี่ยนเป็นระบบไม่ทำงานสำหรับกรณีของฉันขอบคุณการสนับสนุนของคุณทั้งหมด
chings228


24

มีโอกาสดีที่ภาพนั้นอยู่ที่นั่นและคุณมองไม่เห็น UIButtonTypeCustomลองเปลี่ยนชนิดของปุ่มไป หากไม่ได้ผลให้ตั้งค่าสีพื้นหลังของปุ่มเป็น[UIColor clearColor];


9

ปัญหาคือ TintColor ตามค่าเริ่มต้น iOS จะพ่นสีโทนสีน้ำเงินบนปุ่มทุกปุ่ม คุณสามารถใช้มันได้ 3 วิธี

  1. เปลี่ยนสีอ่อน [button setTintColor:[UIColor blackColor]]; นี่อาจทำให้สีของภาพของคุณในแบบที่คุณไม่ต้องการ

  2. ตามที่แนะนำส่วนใหญ่ตั้งค่าภาพพื้นหลัง [button setBackgroundImage:[UIImage...]];

  3. เพิ่ม UIImageView ให้กับปุ่มของคุณ

UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];

[button addSubView:img];



6

ฉันมีปัญหาเดียวกัน บนกระดานเรื่องราวของฉันฉันมีปุ่มที่ไม่มีรูปเลย

ฉันจะกำหนดภาพในรหัส

IOS 7 มาถึงแล้วฉันได้ภาพสีน้ำเงินมามากมาย

ความละเอียดเรียบง่าย แต่สับสน หากฉันกำหนดภาพใด ๆ บนกระดานเรื่องราวแล้วเปลี่ยนภาพในขณะใช้งาน

คุณต้องระบุรูปภาพเริ่มต้นบนกระดานเรื่องราวเสมอแม้ว่าคุณจะไม่ได้ใช้งานก็ตาม


3

สิ่งนี้ใช้ได้สำหรับฉัน

[myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal];

หมายเหตุ: ลบภาพด้านหน้าก่อนทำสิ่งนี้


โปรดลบภาพพื้นหลังได้อย่างไร !!
simbesi.com

3

ด้ายเก่า แต่ฉันต้องการที่จะพูดสอดเพราะฉันมีปัญหาเดียวกัน ปัญหาเป็นเพียงการที่คุณเรียกใช้ setImage เมื่อคุณควรเรียกใช้ setBackgroundImage


1

วิธีแก้ปัญหาที่ให้มาไม่ได้ผลสำหรับฉัน หากคุณไม่ได้ตั้งค่าภาพเริ่มต้นใน Storyboard setBackgroundImageคุณยังสามารถเปลี่ยนภาพของปุ่มโดยใช้

สำหรับตัวอย่างของคุณจำเป็นต้องทำการเปลี่ยนแปลงเล็กน้อย

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setBackgroundImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

1

ปัญหานี้เรียกว่าปัญหาสีฟ้าของปุ่มใน xcode เมื่อเราสร้างปุ่มตามรหัสปุ่มจะแสดงสีโทนสีน้ำเงินโดยค่าเริ่มต้นซึ่งสามารถแก้ไขได้ด้วยการกำหนดสีโทนให้เป็นสีดำหรือสีขาวตามสีของเซลล์ของคุณ รหัสคือ:

UIImage *closebtnimg = [UIImage imageNamed:@"icon_uncheck.png"];
 UIImage *closebtnimg1 = [UIImage imageNamed:@"icon_checked.png"];

Custombutton *button = [Custombutton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(52, 66, 25, 24)];
[button setBackgroundImage:closebtnimg forState:UIControlStateNormal];
[button setBackgroundImage:closebtnimg1 forState:UIControlStateSelected];
[button setTintColor:[UIColor whiteColor]];
[cell.contentView addSubview:button];
[button addTarget:self action:@selector(changeImage:)  forControlEvents:UIControlEventTouchUpInside];

มันมีประโยชน์มาก @Shane
Rudra

1

การใช้ Xcode 9.2 ไม่มีวิธีแก้ปัญหาด้านบนใดที่ทำงานในสิ่งที่ฉันกำลังมองหา

ฉันกำลังมองหาวิธีแก้ปัญหาที่จะให้ฉันตั้งค่า.normalและ.selected UIControlStateรูปภาพภายในกระดานเรื่องราวสำหรับโหมดการเรนเดอร์ดั้งเดิมของพวกเขาแต่ในไฟล์ Swift ไม่มีตัวอักษรสตริงที่ควรมีอยู่เกี่ยวกับชื่อภาพ

โดยพื้นฐานแล้วภายในโค้ดของคุณคุณจะได้รับภาพที่คุณตั้งไว้ในสตอรี่บอร์ดของคุณสำหรับ.normalสถานะและแสดงใหม่เป็น.alwaysOriginal(เหมือนกันสำหรับ.selectedรัฐ) จากนั้นคุณจะตั้งค่าภาพนั้น (ซึ่งขณะนี้แสดงผลเป็นต้นฉบับแล้ว โทนสี) สำหรับรัฐที่เกี่ยวข้อง ( .normalและ.selected) UIButtonของคุณ

นี่มันคือ:

// Get your .normal image (you set via your storyboard) and render it as original
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
// Set your normal image but this time rendered as original
yourButton.setImage(unselectedImage, for: .normal)
// Same for selected state
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)

วิธีนี้คุณสามารถตั้งค่าสถานะรูปปุ่มของคุณและหากชื่อรูปภาพจะเปลี่ยนจะไม่มีผลกับรหัสของคุณ


1

ใน iOS 13 - เพียงตั้งค่าคุณสมบัติ Tint เป็น White ในขณะที่รักษาชนิดของ UIButton เป็น Custom


0

ทำให้สีอ่อนเป็นสีที่ชัดเจนสำหรับทั้งสี่สถานะ (ค่าเริ่มต้น, ไฮไลต์, เลือก, ปิดใช้งาน) ใช้งานได้สำหรับฉัน


-1

ในSwift 4ให้เริ่มต้นUIButtonและกำหนดข้อมูลภาพของคุณดังนี้:

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.