UIAlertController কাস্টম ফন্ট, আকার, রঙ


118

সতর্কতা প্রদর্শনের জন্য আমি নতুন ইউআইআরএলার্টকন্ট্রোলার ব্যবহার করছি। আমার এই কোডটি রয়েছে:

// nil titles break alert interface on iOS 8.0, so we'll be using empty strings
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title message: message preferredStyle: UIAlertControllerStyleAlert];


UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: nil];

[alert addAction: defaultAction];

UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alert animated:YES completion:nil];

এখন আমি শিরোনাম এবং বার্তা ফন্ট, রঙ, আকার এবং তাই পরিবর্তন করতে চাই। এটি করার সর্বোত্তম উপায় কী?

সম্পাদনা করুন: আমার পুরো কোডটি sertোকানো উচিত। আমি ইউআইভিউ-র জন্য বিভাগ তৈরি করেছি যাতে আমি আইওএস সংস্করণে সঠিক সতর্কতা প্রদর্শন করতে পারি।

@implementation UIView (AlertCompatibility)

+( void )showSimpleAlertWithTitle:( NSString * )title
                          message:( NSString * )message
                cancelButtonTitle:( NSString * )cancelButtonTitle
{
    float iOSVersion = [[UIDevice currentDevice].systemVersion floatValue];
    if (iOSVersion < 8.0f)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle: title
                                                        message: message
                                                       delegate: nil
                                              cancelButtonTitle: cancelButtonTitle
                                              otherButtonTitles: nil];
        [alert show];
    }
    else
    {
        // nil titles break alert interface on iOS 8.0, so we'll be using empty strings
        UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title
                                                                       message: message
                                                                preferredStyle: UIAlertControllerStyleAlert];


        UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle
                                                                style: UIAlertActionStyleCancel
                                                              handler: nil];

        [alert addAction: defaultAction];

        UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
        [rootViewController presentViewController:alert animated:YES completion:nil];
    }
}

2
DISCLAIMER:নীচের উত্তরগুলি পড়ছেন এমন যে কেউ। অ্যাপল আপনার অ্যাপ্লিকেশন (গুলি) প্রত্যাখ্যান করবে। যদি আপনি কোনও প্রাইভেট এপি (গুলি) ব্যবহার করেন। এবং নীচের জবাবগুলিতে কী ঘটছে ..
যশ বেদী

উত্তর:


98

এটি বেসরকারী APIs / বৈশিষ্ট্যের বিরুদ্ধে কিনা তা নিশ্চিত নন তবে কেভিসি ব্যবহার আইওএস 8-এ আমার জন্য কাজ করে

UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"Dont care what goes here, since we're about to change below" message:@"" preferredStyle:UIAlertControllerStyleActionSheet];
NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan!"];
[hogan addAttribute:NSFontAttributeName
              value:[UIFont systemFontOfSize:50.0]
              range:NSMakeRange(24, 11)];
[alertVC setValue:hogan forKey:@"attributedTitle"];



UIAlertAction *button = [UIAlertAction actionWithTitle:@"Label text" 
                                        style:UIAlertActionStyleDefault
                                        handler:^(UIAlertAction *action){
                                                    //add code to make something happen once tapped
}];
UIImage *accessoryImage = [UIImage imageNamed:@"someImage"];
[button setValue:accessoryImage forKey:@"image"];

রেকর্ডের জন্য, সেই ব্যক্তিগত API গুলি ব্যবহার করে সতর্কতা অ্যাকশনের ফন্টও পরিবর্তন করা সম্ভব। আবার এটি আপনার অ্যাপ্লিকেশনটিকে প্রত্যাখ্যান করতে পারে, আমি এখনও এই জাতীয় কোড জমা দেওয়ার চেষ্টা করি নি।

let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet)

let action = UIAlertAction(title: "Some title", style: .Default, handler: nil)
let attributedText = NSMutableAttributedString(string: "Some title")

let range = NSRange(location: 0, length: attributedText.length)
attributedText.addAttribute(NSKernAttributeName, value: 1.5, range: range)
attributedText.addAttribute(NSFontAttributeName, value: UIFont(name: "ProximaNova-Semibold", size: 20.0)!, range: range)

alert.addAction(action)

presentViewController(alert, animated: true, completion: nil)

// this has to be set after presenting the alert, otherwise the internal property __representer is nil
guard let label = action.valueForKey("__representer")?.valueForKey("label") as? UILabel else { return }
label.attributedText = attributedText

এক্সকোড 10-এ সুইফ্ট 4.2 এর জন্য এবং শেষ 2 লাইন এখন

guard let label = (action!.value(forKey: "__representer")as? NSObject)?.value(forKey: "label") as? UILabel else { return }
        label.attributedText = attributedText

6
ইহা কাজ করছে. attributedTitleশিরোনাম এবং attributedMessageবার্তা জন্য। এটির সেরা সমাধান কিনা তা নিশ্চিত নই তবে আপাতত এটি আমার পক্ষে যথেষ্ট।
Libor Zapletal

2
আমরা সমস্ত কাস্টমাইজেশন কি ইউআইএলআরলেটকন্ট্রোলার বোতামগুলিতে যুক্ত করতে পারি ??
আঁচল চৌরাসিয়া

1
ধন্যবাদ! আমার একটি ছোট প্রশ্ন আছে - কেউ টাইটেল এবং বার্তাটির সাথে কাস্টম ফন্ট এবং রঙ ব্যবহার করতে পারে UIAlertController। কেউ কীভাবে একই কাজ করতে পারে UIAlertAction?
p0l এরিস

72
আমি আশা করি আপনারা কেউই এটিকে অ্যাপ স্টোরে ছেড়ে দেওয়ার পরিকল্পনা করছেন না কারণ এটি ব্যক্তিগত API গুলি ব্যবহার করে। সিরিয়াসলি, স্ট্যাকওভারফ্লোতে সত্যই তারা 'উত্তর' না থাকলে কেন এই উত্তরগুলি কেন স্বীকার করা হয় তা আমার কোনও ধারণা নেই। এগুলি হ্যাকগুলি যা আপনি অ্যাপ্লিকেশন স্টোরে প্রকাশের মাধ্যমে পেতে বা পেতে পারেন না।
TheCodingArt

3
অ্যাপ স্টোরটিতে অ্যাপ্লিকেশন প্রকাশের ক্ষেত্রে, অ্যাপল দ্বারা প্রাইভেট এপিআই ব্যবহারের কিছু অনুমতি দেওয়া হয়েছে, তবে এটি এপিস ব্যবহার করা উচিত নয় যা ব্যবহারকারীর সিস্টেম / গোপনীয়তার ক্ষতি করতে পারে বা প্রভাবিত করে। সুতরাং, সম্ভবত এই উত্তরটি শুধুমাত্র এর কারণে অনেক লোক গ্রহণ করতে পারে। এবং সম্ভবত এটি অ্যাপ স্টোরটিতে প্রভাব ফেলছে না। যে কেউ এটি ব্যবহার করেছেন, তারা কি তাদের অ্যাপটি প্রত্যাখ্যানযোগ্য নয় তা নিশ্চিত করতে পারেন?
মেহুল ঠাকর

66

আপনি কোনও ইউআইএলার্টকন্ট্রোলারে একটি রঙিন রঙ প্রয়োগ করে বোতামের রঙ পরিবর্তন করতে পারেন।

আইওএস 9-এ, উইন্ডো রঙের রঙটি যদি কোনও কাস্টম রঙে সেট করা থাকে তবে আপনাকে সতর্কতা উপস্থাপনের পরে ডান রঙটি প্রয়োগ করতে হবে। অন্যথায় রঙিন রঙটি আপনার কাস্টম উইন্ডোয়ের রঙিন রঙে পুনরায় সেট হবে।

// In your AppDelegate for example:
window?.tintColor = UIColor.redColor()

// Elsewhere in the App:
let alertVC = UIAlertController(title: "Title", message: "message", preferredStyle: .Alert)
alertVC.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
alertVC.addAction(UIAlertAction(title: "Ok", style: .Default, handler: nil))

// Works on iOS 8, but not on iOS 9
// On iOS 9 the button color will be red
alertVC.view.tintColor = UIColor.greenColor()

self.presentViewController(alert, animated: true, completion: nil)

// Necessary to apply tint on iOS 9
alertVC.view.tintColor = UIColor.greenColor()

20
স্পষ্ট করে বলতে গেলে, কন্ট্রোলার উপস্থাপনের পরে টিন্টকলার সেট করা আইওএস 8 এবং 9 উভয় ক্ষেত্রেই কাজ করে, সুতরাং এটি দুটিবার সেট করার প্রয়োজন হবে না।
আরলোমেডিয়া

আইওএস 9
তে

3
আমি যখন আঙুলটি ট্যাপ করে নীচে টেনে নিয়ে যাই, এটি আবার ডিফল্ট রঙে চলে যায়। কোন ধারণা?
এমএসএমকিউ

এখানে সত্যই একমাত্র শালীন উত্তর is
TheCodingArt

47

আপনি এই কোডটি ব্যবহার করে বোতামের পাঠ্যের রঙ পরিবর্তন করতে পারেন:

alertC.view.tintColor = your color;

হয়তো এই আপনাকে সাহায্য করবে।


iOS9 এর সাথে কাজ করে এমন কোনও সমাধান আপনি কি সিলভারের পরিচালনা করেছেন?
অ্যাশ

1
আমি করিনি. আমি অ্যাপল, # 22391695 এর সাথে একটি বাগ রিপোর্ট তৈরি করেছি।
esilver

1
এই সম্পর্কে আরও তথ্য। দেখে মনে হচ্ছে আপনি যখন দীর্ঘ তালিকার আইটেমগুলিতে স্ক্রোল করবেন তখন আপনি
যেটিকে

3
আইওএস 9 এবং 9.1-এ ইউআইএলআরলেট কনট্রোলারের কোনও কাজই নয় .. অ্যাপল ছেলেরা কী কী তা জানেন না ... প্রতিবার একটি সতর্কতা নিয়ামক বলা হয়ে উইন্ডো রঙটি ম্যানুয়ালি পরিবর্তন করতে হবে এবং হ্যান্ডলারের মধ্যে এটি আবার পরিবর্তন করতে হবে।
অখিলেশ শর্মা

এটি আইওএস 9.3 এর সাথে কাজ করে, যদি না আপনি বাইরের দিকে স্পর্শ করেন: সিস্টেমের নীলায় ফিরে আসবে
রামি বেলজান্টি

35

এক্সকোডে 8 সুইফ্ট 3.0

@IBAction func touchUpInside(_ sender: UIButton) {

    let alertController = UIAlertController(title: "", message: "", preferredStyle: .alert)

    //to change font of title and message.
    let titleFont = [NSFontAttributeName: UIFont(name: "ArialHebrew-Bold", size: 18.0)!]
    let messageFont = [NSFontAttributeName: UIFont(name: "Avenir-Roman", size: 12.0)!]

    let titleAttrString = NSMutableAttributedString(string: "Title Here", attributes: titleFont)
    let messageAttrString = NSMutableAttributedString(string: "Message Here", attributes: messageFont)

    alertController.setValue(titleAttrString, forKey: "attributedTitle")
    alertController.setValue(messageAttrString, forKey: "attributedMessage")

    let action1 = UIAlertAction(title: "Action 1", style: .default) { (action) in
        print("\(action.title)")
    }

    let action2 = UIAlertAction(title: "Action 2", style: .default) { (action) in
        print("\(action.title)")
    }

    let action3 = UIAlertAction(title: "Action 3", style: .default) { (action) in
        print("\(action.title)")
    }

    let okAction = UIAlertAction(title: "Ok", style: .default) { (action) in
        print("\(action.title)")
    }

    alertController.addAction(action1)
    alertController.addAction(action2)
    alertController.addAction(action3)
    alertController.addAction(okAction)

    alertController.view.tintColor = UIColor.blue
    alertController.view.backgroundColor = UIColor.black
    alertController.view.layer.cornerRadius = 40

    present(alertController, animated: true, completion: nil)

}

আউটপুট

UIAlertController কাস্টম ফন্ট, আকার এবং রঙ


দুঃখিত ভাই, এটা শুরু। বৈশিষ্ট্যে প্রয়োজনে আমি আপনাকে অবহিত করব ...
আইওএস

24

@ Dupuis2387 উত্তরের একটি দ্রুত অনুবাদ। কী UIAlertControllerব্যবহার করে কেভিসির মাধ্যমে শিরোনামের রঙ এবং ফন্ট সেট করতে বাক্য গঠনটি তৈরি করে attributedTitle

let message = "Some message goes here."
let alertController = UIAlertController(
    title: "", // This gets overridden below.
    message: message,
    preferredStyle: .Alert
)
let okAction = UIAlertAction(title: "OK", style: .Cancel) { _ -> Void in
}
alertController.addAction(okAction)

let fontAwesomeHeart = "\u{f004}"
let fontAwesomeFont = UIFont(name: "FontAwesome", size: 17)!
let customTitle:NSString = "I \(fontAwesomeHeart) Swift" // Use NSString, which lets you call rangeOfString()
let systemBoldAttributes:[String : AnyObject] = [ 
    // setting the attributed title wipes out the default bold font,
    // so we need to reconstruct it.
    NSFontAttributeName : UIFont.boldSystemFontOfSize(17)
]
let attributedString = NSMutableAttributedString(string: customTitle as String, attributes:systemBoldAttributes)
let fontAwesomeAttributes = [
    NSFontAttributeName: fontAwesomeFont,
    NSForegroundColorAttributeName : UIColor.redColor()
]
let matchRange = customTitle.rangeOfString(fontAwesomeHeart)
attributedString.addAttributes(fontAwesomeAttributes, range: matchRange)
alertController.setValue(attributedString, forKey: "attributedTitle")

self.presentViewController(alertController, animated: true, completion: nil)

এখানে চিত্র বর্ণনা লিখুন


3
"ওকে" বাটন সম্পর্কে কী? আমরা কি এটি কাস্টমাইজ করতে পারি?
হাসান তালেব

@ হাসানতালেব আমি বোতামটি কাস্টমাইজ করার দুর্দান্ত উপায় খুঁজে পাইনি। আপনি সেট করতে পারেন tintColorউপর viewবা মাধ্যমে appearanceWhenContainedIn, কিন্তু আভা যত তাড়াতাড়ি আপনি স্পর্শ হিসাবে দূরে চলে যায়। এখনও উত্তর খুঁজছেন।
রবার্ট চেন

@ আবদুলুল মোমেন আব্দمؤمن আপনি কোন ত্রুটি বার্তাটি দেখছেন? কোড স্নিপেট ধরে নিয়েছে ফন্টআউবাইজ ইতিমধ্যে সেট আপ হয়েছে।
রবার্ট চেন 21

1
@ রবার্টচেন সমস্যাটি সমাধান করার জন্য এর পরে কেবল রঙিনটি চাপিয়ে দিন:, self.presentViewController(alertController, animated: true, completion: nil)আমরা "ওকে" বোতামটির ফন্টটি পরিবর্তন করতে পারি?
হাসান তালেব

4
এটিকে কি ব্যক্তিগত এপি হিসাবে বিবেচনা করা হয় না?
Jinghan Wang

13

UIAppearanceপ্রোটোকল ব্যবহার করুন । একটি ফন্ট সেট করার উদাহরণ - প্রসারিত করতে একটি বিভাগ তৈরি করুন UILabel:

@interface UILabel (FontAppearance)
@property (nonatomic, copy) UIFont * appearanceFont UI_APPEARANCE_SELECTOR;
@end


@implementation UILabel (FontAppearance)

-(void)setAppearanceFont:(UIFont *)font {
    if (font)
        [self setFont:font];
}

-(UIFont *)appearanceFont {
    return self.font;
}

@end

এবং এর ব্যবহার:

UILabel * appearanceLabel = [UILabel appearanceWhenContainedIn:UIAlertController.class, nil];
[appearanceLabel setAppearanceFont:[UIFont boldSystemFontOfSize:10]]; //for example

পরীক্ষিত এবং শৈলীর সাথে কাজ করা UIAlertControllerStyleActionSheet, তবে আমার ধারণা এটি UIAlertControllerStyleAlertখুব কার্যকর হবে with

আইওএস সংস্করণের পরিবর্তে শ্রেণীর প্রাপ্যতার জন্য পিএস ভাল চেক করুন:

if ([UIAlertController class]) {
    // UIAlertController code (iOS 8)
} else {
    // UIAlertView code (pre iOS 8)
}

এটি কাজ করছে তবে এই বার্তায় এবং শিরোনামের জন্য আমার আলাদা আকার থাকতে পারে না।
Libor Zapletal

এটি কাজ করে কিন্তু যখন কোনও অ্যাকশন ক্লিক করা হয়, ফন্টটি আবার মূল আকারে ফিরে যায়? এটা কি আপনার জন্য ঘটে?
ল্যারি

@ ল্যারি আমারও একই সমস্যা আছে এবং আমি এটির মোকাবিলার কোনও উপায় খুঁজে পাইনি .. আপনার আছে?
আলাস্কার

12

UIAppearanceপ্রোটোকল ব্যবহার করুন । এর appearanceFontজন্য ফন্ট পরিবর্তন করতে আরও হ্যাক করুনUIAlertAction

এর জন্য একটি বিভাগ তৈরি করুন UILabel

UILabel + + FontAppearance.h

@interface UILabel (FontAppearance)

@property (nonatomic, copy) UIFont * appearanceFont UI_APPEARANCE_SELECTOR;

@end

UILabel + + FontAppearance.m

@implementation UILabel (FontAppearance)

- (void)setAppearanceFont:(UIFont *)font
{
    if (self.tag == 1001) {
        return;
    }

    BOOL isBold = (self.font.fontDescriptor.symbolicTraits & UIFontDescriptorTraitBold);
    const CGFloat* colors = CGColorGetComponents(self.textColor.CGColor);

    if (self.font.pointSize == 14) {
        // set font for UIAlertController title
        self.font = [UIFont systemFontOfSize:11];
    } else if (self.font.pointSize == 13) {
        // set font for UIAlertController message
        self.font = [UIFont systemFontOfSize:11];
    } else if (isBold) {
        // set font for UIAlertAction with UIAlertActionStyleCancel
        self.font = [UIFont systemFontOfSize:12];
    } else if ((*colors) == 1) {
        // set font for UIAlertAction with UIAlertActionStyleDestructive
        self.font = [UIFont systemFontOfSize:13];
    } else {
        // set font for UIAlertAction with UIAlertActionStyleDefault
        self.font = [UIFont systemFontOfSize:14];
    }
    self.tag = 1001;
}

- (UIFont *)appearanceFont
{
    return self.font;
}

@end

ব্যবহার:

যোগ

[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];

মধ্যে AppDelegate.mএটি সব জন্য কাজ করতে UIAlertController


আইওএস 8.3-এ শিরোনাম 13pt এবং সাহসী তাই আমি শর্তটি পরিবর্তন করেছিif (self.font.pointSize == 13 && isBold) {
অ্যান্ড্রু রাফেল

আপনি এর জন্য ফন্ট পরিবর্তন করার উল্লেখ করেছেন UIAlertAction। তবে যতদূর আমি বলতে পারি, UIAlertActionএটি ব্যবহার করে না UILabel। এটি একটি ব্যবহার করে NSStringgithub.com/nst/iOS- রুনটাইম- Heeers/blob/… আমি জানি না আপনি কীভাবে একটি ফন্টটি কাস্টমাইজ করতে পারেন NSString
টাইপ

ইউআইএলআর্টএকশন মোটেই ভিউ ক্লাস নয়। এটি ক্রিয়াটি বর্ণনা করে এমন একটি বিমূর্ত শ্রেণি। এরপরেই ইউআইএলার্টকন্ট্রোলারের ভিতরে দৃশ্যটি তৈরি করা হয়। আপনি তাই ইউআইএলার্টকন্ট্রোলারের মধ্যে উপস্থিত উপস্থিতি সেট করে।
mangerlahn

12

সুইফট 5 এবং 5.1 । একটি পৃথক ফাইল তৈরি করুন এবং সেখানে ইউআইএএলআরএল্টকন্ট্রোলার কাস্টমাইজেশন কোড রাখুন

import Foundation
import  UIKit

extension UIAlertController {

  //Set background color of UIAlertController
  func setBackgroudColor(color: UIColor) {
    if let bgView = self.view.subviews.first,
      let groupView = bgView.subviews.first,
      let contentView = groupView.subviews.first {
      contentView.backgroundColor = color
    }
  }

  //Set title font and title color
  func setTitle(font: UIFont?, color: UIColor?) {
    guard let title = self.title else { return }
    let attributeString = NSMutableAttributedString(string: title)//1
    if let titleFont = font {
      attributeString.addAttributes([NSAttributedString.Key.font : titleFont],//2
        range: NSMakeRange(0, title.utf8.count))
    }
    if let titleColor = color {
      attributeString.addAttributes([NSAttributedString.Key.foregroundColor : titleColor],//3
        range: NSMakeRange(0, title.utf8.count))
    }
    self.setValue(attributeString, forKey: "attributedTitle")//4
  }

  //Set message font and message color
  func setMessage(font: UIFont?, color: UIColor?) {
    guard let title = self.message else {
      return
    }
    let attributedString = NSMutableAttributedString(string: title)
    if let titleFont = font {
      attributedString.addAttributes([NSAttributedString.Key.font : titleFont], range: NSMakeRange(0, title.utf8.count))
    }
    if let titleColor = color {
      attributedString.addAttributes([NSAttributedString.Key.foregroundColor : titleColor], range: NSMakeRange(0, title.utf8.count))
    }
    self.setValue(attributedString, forKey: "attributedMessage")//4
  }

  //Set tint color of UIAlertController
  func setTint(color: UIColor) {
    self.view.tintColor = color
  }
}

এখন কোনও অ্যাকশন শো সতর্কতা

  func tapShowAlert(sender: UIButton) {
    let alertController = UIAlertController(title: "Alert!!", message: "This is custom alert message", preferredStyle: .alert)
    // Change font and color of title
    alertController.setTitle(font: UIFont.boldSystemFont(ofSize: 26), color: UIColor.yellow)
    // Change font and color of message
    alertController.setMessage(font: UIFont(name: "AvenirNextCondensed-HeavyItalic", size: 18), color: UIColor.red)
    // Change background color of UIAlertController
    alertController.setBackgroudColor(color: UIColor.black)
    let actnOk = UIAlertAction(title: "Ok", style: .default, handler: nil)
    let actnCancel = UIAlertAction(title: "Cancel", style: .default, handler: nil)
    alertController.addAction(actnOk)
    alertController.addAction(actnCancel)
    self.present(alertController, animated: true, completion: nil)
  }

ফলাফল

এখানে চিত্র বর্ণনা লিখুন


1
আমরা কি এখানে কোনও প্রাইভেট অপির অ্যাক্সেস করছি?? আপনি এই অনেক কাস্টম সতর্কতা বৈশিষ্ট্য সহ কোনও অ্যাপ প্রকাশ করেছেন?
যশ বেদী

@ যশবেদি এটি প্রাইভেট এপিআই ব্যবহার করছে এবং অ্যাপল আপনার অ্যাপ্লিকেশনটিকে "নন-পাবলিক এপিআই" ব্যবহারের জন্য প্রত্যাখ্যান করতে পারে। না, আমি কোনও অ্যাপ প্রকাশ করি নি।
গুরজিন্দর সিং

এটি অ্যাপল বিকাশকারী সাইটে উল্লেখ করা হয়েছে -> গুরুত্বপূর্ণ ইউআইএলার্টকন্ট্রোলার শ্রেণিটি যেমন রয়েছে তেমন ব্যবহারের উদ্দেশ্যে এবং এটি সাবক্লাসিং সমর্থন করে না। এই শ্রেণীর জন্য দর্শন শ্রেণিবিন্যাসটি ব্যক্তিগত এবং অবশ্যই এটি পরিবর্তন করা উচিত নয়।
গুরুজিন্দর সিং

বুঝলাম বস ধন্যবাদ
যশ বেদী

@ ডার্কগ্লো দয়া করে ত্রুটিটি উল্লেখ করুন। আমি সফলভাবে একই কোডটি সুইফট 5.1
গুরজিন্দর সিংহ

10

আমি এটি ব্যবহার করছি।

[[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setTintColor:[UIColor blueColor]];

একটি লাইন যুক্ত করুন (অ্যাপডেলিগেট) এবং সমস্ত ইউআইএলআরএল্টকন্ট্রোলারের জন্য কাজ করে।


3
এটি এখন অবহেলিত হিসাবে, [[ইউআইভি দেখুনটিউপ কন্টিন্ট ইন্আইনিস্ট্যান্সফ্ল্যাশস: @ [[ইউআইএলআরলেটকন্ট্রোলার ক্লাস]]] সেটটিন্টকালার: নতুন রঙ] ব্যবহার করুন; পরিবর্তে
পিটার জনসন

8

সুইফট 4

শিরোনামে কাস্টম ফন্টের উদাহরণ। অন্যান্য উপাদান যেমন বার্তা বা ক্রিয়াগুলির জন্য একই জিনিস।

    let titleAttributed = NSMutableAttributedString(
            string: Constant.Strings.cancelAbsence, 
            attributes: [NSAttributedStringKey.font:UIFont(name:"FONT_NAME",size: FONT_SIZE)]
    )

    let alertController = UIAlertController(
        title: "",
        message: "",
        preferredStyle: UIAlertControllerStyle.YOUR_STYLE
    )

    alertController.setValue(titleAttributed, forKey : "attributedTitle")
    present(alertController, animated: true, completion: nil)

5

এখানে সুইফট 4.1 এবং এক্সকোড 9.4.1 এর জন্য একটি বর্ধিতকরণ রয়েছে:

extension UIAlertController{

func addColorInTitleAndMessage(color:UIColor,titleFontSize:CGFloat = 18, messageFontSize:CGFloat = 13){

    let attributesTitle = [NSAttributedStringKey.foregroundColor: color, NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: titleFontSize)]
    let attributesMessage = [NSAttributedStringKey.foregroundColor: color, NSAttributedStringKey.font: UIFont.systemFont(ofSize: messageFontSize)]
    let attributedTitleText = NSAttributedString(string: self.title ?? "", attributes: attributesTitle)
    let attributedMessageText = NSAttributedString(string: self.message ?? "", attributes: attributesMessage)

    self.setValue(attributedTitleText, forKey: "attributedTitle")
    self.setValue(attributedMessageText, forKey: "attributedMessage")

}}

4

আমি সবেমাত্র একটি প্রতিস্থাপন সম্পন্ন করেছি UIAlertControllerএই পথে যাওয়ার একমাত্র বুদ্ধিমান উপায়, আমি মনে করি:


পুরাতন

এখানে সুইফটে আমার পদ্ধতি যা উত্তরগুলি থেকে প্রচুর তথ্য ছড়িয়ে দেয়

func changeAlert(alert: UIAlertController, backgroundColor: UIColor, textColor: UIColor, buttonColor: UIColor?) {
    let view = alert.view.firstSubview().firstSubview()
    view.backgroundColor = backgroundColor
    view.layer.cornerRadius = 10.0

    // set color to UILabel font
    setSubviewLabelsToTextColor(textColor, view: view)

    // set font to alert via KVC, otherwise it'll get overwritten
    let titleAttributed = NSMutableAttributedString(
        string: alert.title!,
        attributes: [NSFontAttributeName:UIFont.boldSystemFontOfSize(17)])
    alert.setValue(titleAttributed, forKey: "attributedTitle")


    let messageAttributed = NSMutableAttributedString(
        string: alert.message!,
        attributes: [NSFontAttributeName:UIFont.systemFontOfSize(13)])
    alert.setValue(messageAttributed, forKey: "attributedMessage")


    // set the buttons to non-blue, if we have buttons
    if let buttonColor = buttonColor {
        alert.view.tintColor = buttonColor
    }
}

func setSubviewLabelsToTextColor(textColor: UIColor, view:UIView) {
    for subview in view.subviews {
        if let label = subview as? UILabel {
            label.textColor = textColor
        } else {
            setSubviewLabelsToTextColor(textColor, view: subview)
        }
    }
}

এটি কিছু পরিস্থিতিতে নিখুঁতভাবে কাজ করে এবং অন্যদের মধ্যে এটি সম্পূর্ণ ব্যর্থ হয় (বর্ণের রঙ প্রত্যাশার মতো দেখায় না)।


4

আপনি PMAlertController এর মতো একটি বাহ্যিক গ্রন্থাগার ব্যবহার করতে পারেন ব্যবহার করতে পারবেন না কাজের জায়গায়, যেখানে আপনি অ্যাপল এর অপ্রয়োজনীয় UIAlertController কে একটি সুপার কাস্টমাইজযোগ্য সতর্কতার সাথে প্রতিস্থাপন করতে পারেন।

এক্সকোড 8, সুইফট 3 এবং উদ্দেশ্য-সি এর সাথে সামঞ্জস্যপূর্ণ

PMAlertController উদাহরণ


বৈশিষ্ট্য:

  • [এক্স] শিরোনাম দেখুন
  • [এক্স] শিরোনাম চিত্র (ptionচ্ছিক)
  • [এক্স] শিরোনাম
  • [এক্স] বর্ণনা বার্তা
  • [এক্স] কাস্টমাইজেশন: হরফ, রঙ, মাত্রা এবং আরও অনেক কিছু
  • [এক্স] 1, 2 বোতাম (অনুভূমিকভাবে) বা 3+ বোতাম (উল্লম্বভাবে)
  • [এক্স] একটি বোতাম টিপে গেলে বন্ধ
  • [এক্স] পাঠ্য ক্ষেত্র সমর্থন
  • [এক্স] ইউআইএলার্টকন্ট্রোলারের সাথে একই রকম প্রয়োগ
  • [এক্স] কোকোপডস
  • [এক্স] কার্থেজ
  • [এক্স] ইউআইকিট ডায়নামিক্স সহ অ্যানিমেশন
  • [x] উদ্দেশ্য-সি সামঞ্জস্য
  • [এক্স] সুইফট 2.3 এবং সুইফট 3 সমর্থন

অ্যাকশন বোতামগুলিতে পাঠ্য দীর্ঘ হলে পিএমএলার্টকন্ট্রোলার শব্দের মোড়কের জন্য অনুমতি দেয়?
জিপলে

@zeeple বিবেচনা করুন যে অ্যাকশন বোতামটি UIButton এর একটি সাবক্লাস। এরকম কিছু actionButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping কাজ করে।
পাওলো মুসোলিনো

3

উপস্থাপনের পরে ভিউটিতে রঙিন রঙ সেট করার সাথে সমস্যা আছে; এমনকি আপনি যদি বর্তমান ভিউকন্ট্রোলারের সমাপ্তি ব্লকে এটি করেন: অ্যানিমেটেড: সমাপ্তি :, এটি বোতাম শিরোনামগুলির রঙের উপর ঝাঁকুনির প্রভাবের কারণ হয়ে থাকে। এটি ম্লান, পেশাদারহীন এবং সম্পূর্ণ অগ্রহণযোগ্য।

উপস্থাপিত অন্যান্য সমাধানগুলি ভিউ হায়ারার্কির অবশিষ্ট স্থির উপর নির্ভর করে, যা অ্যাপলকে ঘৃণা করে। আইওএসের ভবিষ্যতে প্রকাশে এই সমাধানগুলি ব্যর্থ হওয়ার প্রত্যাশা করে।

এই সমস্যাটি সমাধান করার এবং এটি সর্বত্র এটির করার একটি নিশ্চিত উপায় U

শিরোনাম:

//
//  UIAlertController+iOS9TintFix.h
//
//  Created by Flor, Daniel J on 11/2/15.
//

#import <UIKit/UIKit.h>

@interface UIAlertController (iOS9TintFix)

+ (void)tintFix;

- (void)swizzledViewWillAppear:(BOOL)animated;

@end

রুপায়ণ:

//
//  UIAlertController+iOS9TintFix.m
//
//  Created by Flor, Daniel J on 11/2/15.
//

#import "UIAlertController+iOS9TintFix.h"
#import <objc/runtime.h>

@implementation UIAlertController (iOS9TintFix)

+ (void)tintFix {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method method  = class_getInstanceMethod(self, @selector(viewWillAppear:));
        Method swizzle = class_getInstanceMethod(self, @selector(swizzledViewWillAppear:));
        method_exchangeImplementations(method, swizzle);});
}

- (void)swizzledViewWillAppear:(BOOL)animated {
    [self swizzledViewWillAppear:animated];
    for (UIView *view in self.view.subviews) {
        if (view.tintColor == self.view.tintColor) {
            //only do those that match the main view, so we don't strip the red-tint from destructive buttons.
            self.view.tintColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
            [view setNeedsDisplay];
        }
    }
}

@end

আপনার প্রকল্পে একটি .pch (প্রাক্পম্পাইল্ড শিরোলেখ) যুক্ত করুন এবং বিভাগটি অন্তর্ভুক্ত করুন:

#import "UIAlertController+iOS9TintFix.h"

আপনি প্রকল্পটিতে সঠিকভাবে নিবন্ধটি নিবন্ধভুক্ত করেছেন তা নিশ্চিত করুন এবং এতে প্রতিটি ক্লাসে ইউআইএলার্টকন্ট্রোলার ব্যবহার করে এমন বিভাগের পদ্ধতি অন্তর্ভুক্ত থাকবে।

তারপরে, আপনার অ্যাপের প্রতিনিধিগুলিতে ফিনিশলঞ্চিং উইথঅ্যাপশন পদ্ধতি না করে আপনার বিভাগ এবং কলটি আমদানি করুন

[UIAlertController tintFix];

এবং এটি আপনার কোড দ্বারা বা অন্য কারও দ্বারা চালু করা হোক না কেন এটি স্বয়ংক্রিয়ভাবে আপনার অ্যাপ্লিকেশনের মধ্যে ইউআইএলআর্টকন্ট্রোলারের প্রতিটি একক ইভেন্টে প্রচার করবে।

এই সমাধানটি আইওএস 8.X এবং আইওএস 9.X উভয়ের জন্যই কাজ করে এবং উপস্থাপনা পোস্ট-উপস্থাপনা পদ্ধতির ঝাঁকুনির অভাব রয়েছে। এটি ইউআইএলার্টকন্ট্রোলারের উপ-মতামতগুলির ভিউ হায়ারার্কির সাথে সম্মতভাবে সম্পূর্ণ অজ্ঞাব্য।

শুভ হ্যাকিং!


এই সমাধানটি বেশিরভাগ ক্ষেত্রেই কাজ করে। ডিভাইসটি ঘোরানোর সময়, টিউসগুলি সুইজেডিংয়ের আগে যেমন ছিল তেমন ফিরে যায়।
ধিরাজ গুপ্ত

ধীরাজ, আমি আপনার অনুসন্ধানগুলি সন্ধানের জন্য স্পষ্টভাবে একটি প্রজেক্ট সেটআপে এটি আবার পরীক্ষা করেছি, এবং আমি তাতে সম্মত হই না। আভাটি যেভাবে ঘোরানো হয়েছিল তার দিকে আর ফিরে যায় না।
ওবিডান

এক্সকোড .4.৪ এবং এক্সকোড 7.০ এ কার্যকরী যাচাই করা হয়েছে। 8.X এবং 9.0 এর সমস্ত প্রকারের সিমুলেটরগুলি চলছে। যদি অনুরোধ করা হয় তবে আমি প্রকল্পটি গিথুবে রাখব।
ওবিডান

ঠিক আছে আপনি এগিয়ে যেতে পারেন এবং একটি প্রকল্প স্থাপন করতে পারেন, কিন্তু এটি আমার সাথে ঘটতে দেখছিল। এটি আইপ্যাডেও কাজ করে না। আপনার পদ্ধতি swizzling ধারণার উপর ভিত্তি করে, তবে আমি ছিল , swizzling viewDidLayoutSubviews দ্বারা এটি কাজ করা যদিও সক্ষম।
ধিরাজ গুপ্ত

আপনি যদি কোনও প্রকল্প স্থাপন করেন, তবে আমি ভিডডিআলআউটসউবভিউস সুইজলটির সাথে একটি টান অনুরোধ জমা দিতে পারতাম, যা আমি অ্যাপ্লিকেশন স্টোরটিতে আমার অ্যাপ্লিকেশনটির সর্বশেষ বিল্ডে স্রেফ ব্যবহার করেছি এবং জমা দিয়েছি এবং আপনি একটি চেহারা পেতে পারেন, সম্ভবত?
ধীরাজ গুপ্ত

3

দয়া করে এটি এই বিভাগ। আমি ইউআআইএলআর্টএ্যাকশন এবং ইউআইএলার্টকন্ট্রোলারের FONT এবং রঙ পরিবর্তন করতে সক্ষম।

ব্যবহার করুন:

UILabel * appearanceLabel = [UILabel appearanceWhenContainedIn:UIAlertController.class, nil];
[appearanceLabel setAppearanceFont:yourDesireFont]];  

5
দয়া করে এখানে কোডটি পেস্ট করুন বা এমন একটি পরিষেবা ব্যবহার করুন যাতে লোকেরা লগ ইন করতে পারে না
সুলতান

3

সুইফটে 4.1 এবং এক্সকোড 10 এ

//Displaying alert with multiple actions and custom font ans size
let alert = UIAlertController(title: "", message: "", preferredStyle: .alert)

let titFont = [NSAttributedStringKey.font: UIFont(name: "ArialHebrew-Bold", size: 15.0)!]
let msgFont = [NSAttributedStringKey.font: UIFont(name: "Avenir-Roman", size: 13.0)!]

let titAttrString = NSMutableAttributedString(string: "Title Here", attributes: titFont)
let msgAttrString = NSMutableAttributedString(string: "Message Here", attributes: msgFont)

alert.setValue(titAttrString, forKey: "attributedTitle")
alert.setValue(msgAttrString, forKey: "attributedMessage")

let action1 = UIAlertAction(title: "Action 1", style: .default) { (action) in
    print("\(String(describing: action.title))")
}

let action2 = UIAlertAction(title: "Action 2", style: .default) { (action) in
    print("\(String(describing: action.title))")
}

let okAction = UIAlertAction(title: "Ok", style: .default) { (action) in
    print("\(String(describing: action.title))")
}
alert.addAction(action1)
alert.addAction(action2)
alert.addAction(okAction)

alert.view.tintColor = UIColor.blue
alert.view.layer.cornerRadius = 40
// //If required background colour 
// alert.view.backgroundColor = UIColor.white

DispatchQueue.main.async(execute: {
    self.present(alert, animated: true)
})

আপনার উত্তর একটি আপডেট প্রয়োজন, self.present(alertController, animated: true)বা self.present(alert, animated: true)
যশ বেদী

@ যশ বেদী, ধন্যবাদ আমি আমার উত্তর আপডেট করেছি দয়া করে একবার এটি পরীক্ষা করে দেখুন।
আইওএস

2

সমাধান / আইওএস 9 এর জন্য হ্যাক

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Test Error" message:@"This is a test" preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        NSLog(@"Alert View Displayed");
 [[[[UIApplication sharedApplication] delegate] window] setTintColor:[UIColor whiteColor]];
    }];

    [alertController addAction:cancelAction];
    [[[[UIApplication sharedApplication] delegate] window] setTintColor:[UIColor blackColor]];
    [self presentViewController:alertController animated:YES completion:^{
        NSLog(@"View Controller Displayed");
    }];

আমি এই চেষ্টা করেছিলাম। নোট করুন যে একবার আপনি সতর্কতা নিয়ন্ত্রক উপস্থাপিত হওয়ার পরে উইন্ডো রঙিন সেটিংটি পুনরায় করছেন। আমি সতর্কতা নিয়ামকের ডানদিকে রঙটি আবার স্যুইচ করতে দেখছি। আমি বিশ্বাস করি যে কোনও পদক্ষেপটি টেপ করা হলে অবশ্যই পুনঃস্থাপনটি করা উচিত।
জার্মেইন

এটি নির্দেশ করার জন্য @ জার্মেনকে ধন্যবাদ .. কোডে পরিবর্তনগুলি করুন। আমি এখনই সতর্কতাটিতে রিভার্ট পরিচালনা করছি .. তবে হ্যাঁ আমি সম্মতি জানাই যে হ্রাসকারীকেও হ্রাস করা যায়
অখিলেশ শর্মা

1

আমি আরবান আউটফিটারদের পক্ষে কাজ করি। আমাদের একটি ওপেন সোর্স পোড রয়েছে URBNAlert, যা আমরা আমাদের সমস্ত অ্যাপ্লিকেশনে ব্যবহার করেছি। এটি অফ ভিত্তিক UIAlertController, তবে অত্যন্ত স্বনির্ধারিত।

উত্সটি এখানে: https://github.com/urbn/URBNAlert

বা পোড দ্বারা সহজভাবে স্থাপন করে ইনস্টল করুন URBNAlert পোডফাইলে পোড

এখানে কিছু নমুনা কোড:

URBNAlertViewController *uac = [[URBNAlertViewController alloc] initWithTitle:@"The Title of my message can be up to 2 lines long. It wraps and centers." message:@"And the message that is a bunch of text. And the message that is a bunch of text. And the message that is a bunch of text."];

// You can customize style elements per alert as well. These will override the global style just for this alert.
uac.alertStyler.blurTintColor = [[UIColor orangeColor] colorWithAlphaComponent:0.4];
uac.alertStyler.backgroundColor = [UIColor orangeColor];
uac.alertStyler.textFieldEdgeInsets = UIEdgeInsetsMake(0.0, 15.0, 0.0, 15.0);
uac.alertStyler.titleColor = [UIColor purpleColor];
uac.alertStyler.titleFont = [UIFont fontWithName:@"Chalkduster" size:30];
uac.alertStyler.messageColor = [UIColor blackColor];
uac.alertStyler.alertMinWidth = @150;
uac.alertStyler.alertMaxWidth = @200;
// many more styling options available 

[uac addAction:[URBNAlertAction actionWithTitle:@"Ok" actionType:URBNAlertActionTypeNormal actionCompleted:^(URBNAlertAction *action) {
      // Do something
}]];

[uac addAction:[URBNAlertAction actionWithTitle:@"Cancel" actionType:URBNAlertActionTypeCancel actionCompleted:^(URBNAlertAction *action) {
      // Do something
}]];

[uac show];

এটি কি অ্যাকশনশিট শৈলীতে সমর্থন করে?
ড্যান্পে 17'12

@ ড্যান্প এটি করেন না, এটি নিখুঁতভাবে সতর্কবার্তাগুলির জন্য .. এটি বলা হচ্ছে .. যদি এর কিছু আপনার ইচ্ছা হয় তবে রেপোতে একটি সমস্যা তৈরি করে। এটি
এমনটিই

1

ক্যানসেলের মতো একটি বোতামের রঙকে লাল রঙে পরিবর্তন করতে আপনি এই স্টাইলের সম্পত্তিটি ইউআইএলআর্টএ্যাকশনস্টাইল.ডেসট্রাকটিভ নামে ব্যবহার করতে পারেন:

let prompt = UIAlertController.init(title: "Reset Password", message: "Enter Your E-mail :", preferredStyle: .alert)
        let okAction = UIAlertAction.init(title: "Submit", style: .default) { (action) in
              //your code
}

let cancelAction = UIAlertAction.init(title: "Cancel", style: UIAlertActionStyle.destructive) { (action) in
                //your code
        }
        prompt.addTextField(configurationHandler: nil)
        prompt.addAction(okAction)
        prompt.addAction(cancelAction)
        present(prompt, animated: true, completion: nil);

1

আইওএস 9.0 এবং তারপরের জন্য অ্যাপের প্রতিনিধিতে এই কোডটি ব্যবহার করুন

[[UIView appearanceWhenContainedInInstancesOfClasses:@[[UIAlertController class]]] setTintColor:[UIColor redColor]];

1

সুইফ্ট 5.0

let titleAttrString = NSMutableAttributedString(string: "This is a title", attributes: [NSAttributedString.Key.font: UIFont(name: "CustomFontName", size: 17) as Any])
let messageAttrString = NSMutableAttributedString(string: "This is a message", attributes: [NSAttributedString.Key.font: UIFont(name: "CustomFontName", size: 13) as Any])

alertController.setValue(titleAttrString, forKey: "attributedTitle")
alertController.setValue(messageAttrString, forKey: "attributedMessage")

0

কিছুটা জটিল, তবে ব্যাকগ্রাউন্ড এবং পাঠ্য রঙ সেট করতে এখনই এটি আমার পক্ষে কাজ করে। আমি এটি এখানে খুঁজে পেয়েছি ।

UIView * firstView = alertController.view.subviews.firstObject;
    UIView * nextView = firstView.subviews.firstObject;
    nextView.backgroundColor = [UIColor blackColor];

এটি ব্যাকগ্রাউন্ড রঙের জন্য কাজ করে তবে এটি কখনও রঙিন রঙের পরিবর্তন করে না আমি এ সম্পর্কে কিছুটা বিভ্রান্ত
অখিলেশ শর্মা

0

আমি একটি পদ্ধতি অবজেক্ট-সি তৈরি করেছি

-(void)customAlertTitle:(NSString*)title message:(NSString*)message{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 80)];

UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 270, 50)];
titleLabel.text = title;
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.numberOfLines = 2;
titleLabel.textColor = [UIColor redColor];
titleLabel.textAlignment = NSTextAlignmentCenter;

[subView addSubview:titleLabel];

UILabel *messageLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 30, 270, 50)];
messageLabel.text = message;
messageLabel.font = [UIFont systemFontOfSize:18];
messageLabel.numberOfLines = 2;
messageLabel.textColor = [UIColor redColor];
messageLabel.textAlignment = NSTextAlignmentCenter;

[subView addSubview:messageLabel];

[alertView setValue:subView forKey:@"accessoryView"];
[alertView show];
}

কোডটি Xcode 8.3.1 এ পুরোপুরি ডুবে আছে। আপনি প্রয়োজন অনুযায়ী কাস্টমাইজ করতে পারেন।


0

আমি কেবল এই ধরণের চাহিদা, আপাতদৃষ্টিতে এবং সিস্টেম ব্যবহার করি, বিশদটি কিছুটা আলাদা, তাই আমরা ... ওসি বুঝতে পারলাম সতর্কতা এবং শীট পপআপ উইন্ডো এনক্যাপসুলেশন।

প্রায়শই দৈনিক বিকাশের মুখোমুখি হতে হয় সতর্কতার সাথে একটি চিত্র যুক্ত করা বা একটি বোতামের রঙ পরিবর্তন করা, যেমন "সাধারণ" চাহিদা, আজ একটি এবং একই উপাদানগুলির সিস্টেম উপাদান নিয়ে আসে এবং কাস্টমাইজড প্যাকেজিং উপাদানগুলির চাহিদা পুরোপুরি পূরণ করতে পারে।

গিথুব: https://github.com/ReversScale/RSCustomAlertView

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.