আইওএসে একটি বার্তা প্রদর্শিত হচ্ছে যা অ্যান্ড্রয়েডে টোস্টের মতো একই কার্যকারিতা রয়েছে


120

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



লিঙ্কটির জন্য ইমেনুয়েলকে ধন্যবাদ। আমি এটি বাস্তবায়নের চেষ্টা করছি
নিলেশ কুমার


এই লোক সমাধান প্রদান করেনি stackoverflow.com/questions/3522866/...
user3556406

একটি দুর্দান্ত লিবিব
Ferran Maylinch

উত্তর:


99

আপনি এর ব্যবহার করতে পারেন MBProgressHUD প্রকল্পের ।

MBProgressHUDModeTextটোস্টের মতো আচরণের জন্য এইচইউডি মোড ব্যবহার করুন,

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];

// Configure for text only and offset down
hud.mode = MBProgressHUDModeText;
hud.label.text = @"Some message...";
hud.margin = 10.f;
hud.yOffset = 150.f;
hud.removeFromSuperViewOnHide = YES;

[hud hideAnimated:YES afterDelay:3];

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


1
100% অ্যান্ড্রয়েড-এর মতো আচরণের জন্য আমি সেটিংসের পরামর্শ দিচ্ছি hud.isUserInteractionEnabled = falseযাতে বার্তাটি প্রদর্শিত হওয়ার সময় আপনি বাকী অ্যাপের সাথে ইন্টারঅ্যাক্ট করতে পারেন।
মটিয়া সি।

@MattiaC। hud.isUserInteractionEnabled = falseকেবল গেটর সরবরাহ করা হয় এমন চেহারাগুলির জন্য আমি মান নির্ধারণ করতে সক্ষম নই ।
অনিকেত ঠাকুর

এটি ইউআইকে অবরুদ্ধ করছে। এটি অ্যান্ড্রয়েডের মতো একই আচরণ নয়
রোমান এম

hud.offset = CGPoint(x: 0, y: MBProgressMaxOffset)নীচের প্রান্তে HUD অবস্থান করতে ব্যবহার করুন ।
এলজিডি

86
NSString *message = @"Some message...";

UIAlertView *toast = [[UIAlertView alloc] initWithTitle:nil
                                                message:message
                                               delegate:nil
                                      cancelButtonTitle:nil
                                      otherButtonTitles:nil, nil];
[toast show];

int duration = 1; // duration in seconds

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [toast dismissWithClickedButtonIndex:0 animated:YES];
});

আইওএস 9 বা তার পরে ইউআইএলআর্টভিউকন্ট্রোলার ব্যবহার করা

NSString *message = @"Some message...";

UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil
                                                               message:message
                                                        preferredStyle:UIAlertControllerStyleAlert];

[self presentViewController:alert animated:YES completion:nil];

int duration = 1; // duration in seconds

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, duration * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [alert dismissViewControllerAnimated:YES completion:nil];
});

সুইফট ৩.২

let message = "Some message..."
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
self.present(alert, animated: true)

// duration in seconds
let duration: Double = 5

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + duration) {
    alert.dismiss(animated: true)
}

7
এটি টোস্টের মতো হুবহু নয় - ডায়ালগ দেখানোর সময় ব্যবহারকারীর অন্যান্য মতামতের সাথে কথোপকথন অক্ষম করা হয়। স্ক্রিনের অন্যান্য মতামতের সাথে ইন্টারঅ্যাক্ট করার ক্ষমতা যুক্ত করার সাথে 'গ্রেড আউট' ব্যাকগ্রাউন্ড সরিয়ে দেওয়ার কোনও উপায় আছে (যেমন সতর্কতার পিছনে বাটন বা পেইন্টিং ক্যানভাসের ক্ষেত্রে আমার ক্ষেত্রে)?
আমাদের

ইউআইএলআর্টভিউ আইওএস 9-এ অবমুক্ত করা হয়েছে। এটি করার কোনও বিকল্প উপায় আছে?
রাজীব ভাটিয়া

ধন্যবাদ তবে আমি টোস্টটি প্রদর্শনের জন্য কি ইউআইএলআরলেটকন্ট্রোলার ব্যবহার করতে পারি?
রাজীব ভাটিয়া

50

অ্যান্ড্রয়েডে, একটি টোস্ট হ'ল একটি ছোট বার্তা যা অল্প সময়ের জন্য স্ক্রিনে প্রদর্শিত হয় এবং তারপরে অ্যাপ্লিকেশনটির সাথে ব্যবহারকারীর ইন্টারঅ্যাকশন ব্যাহত না করে স্বয়ংক্রিয়ভাবে অদৃশ্য হয়ে যায়।

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

তাই অ্যান্ড্রয়েড ব্যাকগ্রাউন্ড থেকে আসা প্রচুর লোক টোস্টের আইওএস সংস্করণটি কী তা জানতে চান। বর্তমান প্রশ্নটি ছাড়াও অন্যান্য অনুরূপ প্রশ্নগুলি এখানে , এখানে এবং এখানে পাওয়া যাবে । উত্তরটি হ'ল আইওএসে টোস্টের ঠিক সমান কোনও নেই । উপস্থাপন করা হয়েছে যে বিভিন্ন workaround, সহ, সহ

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

UI কে একইভাবে পুনরায় ডিজাইনিং করার বিষয়টি বিবেচনা করুন। অথবা, যদি তথ্যটি খুব গুরুত্বপূর্ণ হয়, তবে একটি সতর্কতার উত্তর হতে পারে।


খুব ভালভাবে বলা যায়, বিশেষ করে ইউআই-র কাজ করার ধারণাটি। এটি অবশ্যই বিকাশকারী বা ডিজাইনারদের পক্ষে সহজ উত্তর নয়, তবে টোস্টগুলি সহজেই অন্য একটি মোবাইল ইউএক্স "জাঙ্ক ড্রয়ার" হিসাবে পরিণত হতে পারে, যা প্রায়শই 1) চটি এবং বিভ্রান্তিকর বিষয়বস্তুর জন্য ডাম্পিং গ্রাউন্ড হিসাবে ব্যবহৃত হয়, বা 2) সত্যই দরকারী তথ্য এবং যেমন, ব্যাজ, আইকন, বা ইনলাইন স্থিতি বার্তা হিসাবে অ্যাপ্লিকেশনটির প্রাথমিক সামগ্রী উপাদানগুলির সাথে সরাসরি প্রসঙ্গে উপস্থাপিত হবে।
macserv

26

সুইফট 4

কিভাবে এই ছোট কৌশল সম্পর্কে?

func showToast(controller: UIViewController, message : String, seconds: Double) {
    let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
    alert.view.backgroundColor = UIColor.black
    alert.view.alpha = 0.6
    alert.view.layer.cornerRadius = 15

    controller.present(alert, animated: true)

    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + seconds) {
        alert.dismiss(animated: true)
    }
}

কল করার উদাহরণ:

showToast(controller: self, message : "This is a test", seconds: 2.0)

আউটপুট:


2
দারুণ দেখাচ্ছে. ধন্যবাদ!
জিরো005

@ ডেকেডস সমস্যা কি ছিল?
সাজ্জাদ হিশাইন খান

1
হাই সাজ্জাদ, সমস্যাটি স্পষ্টতই ছিল যে এর জন্য একটি নেভিগেশনকন্ট্রোলার দরকার। আমি কেবল এটি সামনে আনার চেষ্টা করছিলাম। হতে পারে আমার মন্তব্যটি ভুল এবং অপ্রচলিত
দশক

আপনি যে স্থির করেছেন শুনে খুশি
সজ্জাদ হিজাইন খান

1
অনেক অনেক ধন্যবাদ, খুব সুনির্দিষ্ট সমাধান
সাকথিমুথিয়াহ

21

সুইফট 3

তৃতীয় পক্ষের কোড ছাড়াই একটি সহজ সমাধানের জন্য:

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

কেবল একটি সাধারণ ইউআইএলার্টকন্ট্রোলার ব্যবহার করুন তবে স্টাইল = অ্যাকশনশিট সহ (নীচে কোডটি দেখুন)

let alertDisapperTimeInSeconds = 2.0
let alert = UIAlertController(title: nil, message: "Toast!", preferredStyle: .actionSheet)
self.present(alert, animated: true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + alertDisapperTimeInSeconds) {
  alert.dismiss(animated: true)
}

এই সমাধানের সুবিধা:

  1. অ্যান্ড্রয়েড টোস্ট ম্যাসেজ পছন্দ করে
  2. তবুও আইওএস চেহারা এবং অনুভূত

2
চালাক এক। ধন্যবাদ আমি কখনই ভাবিনি, ধন্যবাদ: ডি
ম্যাকসেম মুসিয়েঙ্কো ২


4

আপনি যদি আইওএস স্টাইলের সাথে একটি চান তবে এই কাঠামোটি গিথুব থেকে ডাউনলোড করুন

আইওএস টোস্ট সতর্কতা দেখুন ফ্রেমওয়ার্ক

একবার ফ্রেমওয়ার্ক আমদানি করে এই উদাহরণগুলি আপনাকে ইউআইভিউকন্ট্রোলার নিয়ে কাজ করে।

উদাহরণ 1:

//Manual 
let tav = ToastAlertView()
tav.message = "Hey!"
tav.image = UIImage(named: "img1")!
tav.show()
//tav.dismiss() to Hide

উদাহরণ 2:

//Toast Alert View with Time Dissmis Only
self.showToastAlert("5 Seconds",
                image: UIImage(named: "img1")!,
                hideWithTap: false,
                hideWithTime: true,
                hideTime: 5.0)

ফাইনাল:

টোস্ট সতর্কতা চিত্রের উদাহরণ দেখুন


4

সুইফট 4.0:

একটি নতুন সুইফ্ট ফাইল তৈরি করুন। (ফাইল-নতুন-ফাইল-খালি সুইফ্ট ফাইল)। এটির নাম রাখুন ইউআইভিউউটোস্ট following নীচের কোডটি যুক্ত করুন।

import UIKit

func /(lhs: CGFloat, rhs: Int) -> CGFloat {
return lhs / CGFloat(rhs)
}

let HRToastDefaultDuration  =   2.0
let HRToastFadeDuration     =   0.2
let HRToastHorizontalMargin : CGFloat  =   10.0
let HRToastVerticalMargin   : CGFloat  =   10.0

let HRToastPositionDefault  =   "bottom"
let HRToastPositionTop      =   "top"
let HRToastPositionCenter   =   "center"

// activity
let HRToastActivityWidth  :  CGFloat  = 100.0
let HRToastActivityHeight :  CGFloat  = 100.0
let HRToastActivityPositionDefault    = "center"

// image size
let HRToastImageViewWidth :  CGFloat  = 80.0
let HRToastImageViewHeight:  CGFloat  = 80.0

// label setting
let HRToastMaxWidth       :  CGFloat  = 0.8;      // 80% of parent view width
let HRToastMaxHeight      :  CGFloat  = 0.8;
let HRToastFontSize       :  CGFloat  = 16.0
let HRToastMaxTitleLines              = 0
let HRToastMaxMessageLines            = 0

// shadow appearance
let HRToastShadowOpacity  : CGFloat   = 0.8
let HRToastShadowRadius   : CGFloat   = 6.0
let HRToastShadowOffset   : CGSize    = CGSize(width: 4.0, height: 4.0)

let HRToastOpacity        : CGFloat   = 0.5
let HRToastCornerRadius   : CGFloat   = 10.0

var HRToastActivityView: UnsafePointer<UIView>?
var HRToastTimer: UnsafePointer<Timer>?
var HRToastView: UnsafePointer<UIView>?


// Color Scheme
let HRAppColor:UIColor = UIColor.black//UIappViewController().appUIColor
let HRAppColor_2:UIColor = UIColor.white


let HRToastHidesOnTap       =   true
let HRToastDisplayShadow    =   false

//HRToast (UIView + Toast using Swift)

extension UIView {

//public methods
func makeToast(message msg: String) {
    self.makeToast(message: msg, duration: HRToastDefaultDuration, position: HRToastPositionDefault as AnyObject)
}

func makeToast(message msg: String, duration: Double, position: AnyObject) {
    let toast = self.viewForMessage(msg: msg, title: nil, image: nil)
    self.showToast(toast: toast!, duration: duration, position: position)
}

func makeToast(message msg: String, duration: Double, position: AnyObject, title: String) {
    let toast = self.viewForMessage(msg: msg, title: title, image: nil)
    self.showToast(toast: toast!, duration: duration, position: position)
}

func makeToast(message msg: String, duration: Double, position: AnyObject, image: UIImage) {
    let toast = self.viewForMessage(msg: msg, title: nil, image: image)
    self.showToast(toast: toast!, duration: duration, position: position)
}

func makeToast(message msg: String, duration: Double, position: AnyObject, title: String, image: UIImage) {
    let toast = self.viewForMessage(msg: msg, title: title, image: image)
    self.showToast(toast: toast!, duration: duration, position: position)
}

func showToast(toast: UIView) {
    self.showToast(toast: toast, duration: HRToastDefaultDuration, position: HRToastPositionDefault as AnyObject)
}

func showToast(toast: UIView, duration: Double, position: AnyObject) {
    let existToast = objc_getAssociatedObject(self, &HRToastView) as! UIView?
    if existToast != nil {
        if let timer: Timer = objc_getAssociatedObject(existToast!, &HRToastTimer) as? Timer {
            timer.invalidate();
        }
        self.hideToast(toast: existToast!, force: false);
    }

    toast.center = self.centerPointForPosition(position: position, toast: toast)
    toast.alpha = 0.0

    if HRToastHidesOnTap {
        let tapRecognizer = UITapGestureRecognizer(target: toast, action: #selector(handleToastTapped(recognizer:)))
        toast.addGestureRecognizer(tapRecognizer)
        toast.isUserInteractionEnabled = true;
        toast.isExclusiveTouch = true;
    }

    self.addSubview(toast)
    objc_setAssociatedObject(self, &HRToastView, toast, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)

    UIView.animate(withDuration: HRToastFadeDuration,
                               delay: 0.0, options: ([.curveEaseOut, .allowUserInteraction]),
                               animations: {
                                toast.alpha = 1.0
    },
                               completion: { (finished: Bool) in
                                let timer = Timer.scheduledTimer(timeInterval: duration, target: self, selector: #selector(self.toastTimerDidFinish(timer:)), userInfo: toast, repeats: false)
                                objc_setAssociatedObject(toast, &HRToastTimer, timer, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    })
}

func makeToastActivity() {
    self.makeToastActivity(position: HRToastActivityPositionDefault as AnyObject)
}

func showToastActivity() {
    self.isUserInteractionEnabled = false
    self.makeToastActivity()
}

func removeToastActivity() {
    self.isUserInteractionEnabled = true
    self.hideToastActivity()

}

func makeToastActivityWithMessage(message msg: String){
    self.makeToastActivity(position: HRToastActivityPositionDefault as AnyObject, message: msg)
}
func makeToastActivityWithMessage(message msg: String,addOverlay: Bool){

    self.makeToastActivity(position: HRToastActivityPositionDefault as AnyObject, message: msg,addOverlay: true)
}

func makeToastActivity(position pos: AnyObject, message msg: String = "",addOverlay overlay: Bool = false) {
    let existingActivityView: UIView? = objc_getAssociatedObject(self, &HRToastActivityView) as? UIView
    if existingActivityView != nil { return }

    let activityView = UIView(frame: CGRect(x:0, y:0, width: self.frame.width, height: self.frame.height))
    activityView.center = self.centerPointForPosition(position: pos, toast: activityView)
    activityView.alpha = 0.0
    activityView.autoresizingMask = ([.flexibleLeftMargin, .flexibleTopMargin, .flexibleRightMargin, .flexibleBottomMargin])
    activityView.layer.cornerRadius = HRToastCornerRadius

    if HRToastDisplayShadow {
        activityView.layer.shadowColor = UIColor.black.cgColor
        activityView.layer.shadowOpacity = Float(HRToastShadowOpacity)
        activityView.layer.shadowRadius = HRToastShadowRadius
        activityView.layer.shadowOffset = HRToastShadowOffset
    }

    let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
    activityIndicatorView.center = CGPoint(x:activityView.bounds.size.width / 2, y: activityView.bounds.size.height / 2)
    activityIndicatorView.color = HRAppColor
    activityView.addSubview(activityIndicatorView)
    activityIndicatorView.startAnimating()

    if (!msg.isEmpty){
        activityIndicatorView.frame.origin.y -= 10



        let activityMessageLabel = UILabel(frame: CGRect(x: activityView.bounds.origin.x, y: (activityIndicatorView.frame.origin.y + activityIndicatorView.frame.size.height + 10), width: activityView.bounds.size.width, height: 20))
        activityMessageLabel.textColor = UIColor.white
        activityMessageLabel.font = (msg.count<=10) ? UIFont(name:activityMessageLabel.font.fontName, size: 16) : UIFont(name:activityMessageLabel.font.fontName, size: 16)
        activityMessageLabel.textAlignment = .center
        activityMessageLabel.text = msg + ".."
        if overlay {
            activityMessageLabel.textColor = UIColor.white
            activityView.backgroundColor = HRAppColor.withAlphaComponent(HRToastOpacity)
            activityIndicatorView.color = UIColor.white
        }
        else {
            activityMessageLabel.textColor = HRAppColor
            activityView.backgroundColor = UIColor.clear
            activityIndicatorView.color = HRAppColor
        }

        activityView.addSubview(activityMessageLabel)

    }

    self.addSubview(activityView)

    // associate activity view with self
    objc_setAssociatedObject(self, &HRToastActivityView, activityView, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)

    UIView.animate(withDuration: HRToastFadeDuration,
                               delay: 0.0,
                               options: UIViewAnimationOptions.curveEaseOut,
                               animations: {
                                activityView.alpha = 1.0
    },
                               completion: nil)
    self.isUserInteractionEnabled = false
}

func hideToastActivity() {
    self.isUserInteractionEnabled = true
    let existingActivityView = objc_getAssociatedObject(self, &HRToastActivityView) as! UIView?
    if existingActivityView == nil { return }
    UIView.animate(withDuration: HRToastFadeDuration,
                               delay: 0.0,
                               options: UIViewAnimationOptions.curveEaseOut,
                               animations: {
                                existingActivityView!.alpha = 0.0
    },
                               completion: { (finished: Bool) in
                                existingActivityView!.removeFromSuperview()
                                objc_setAssociatedObject(self, &HRToastActivityView, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    })
}

/*
 *  private methods (helper)
 */
func hideToast(toast: UIView) {
    self.isUserInteractionEnabled = true
    self.hideToast(toast: toast, force: false);
}

func hideToast(toast: UIView, force: Bool) {
    let completeClosure = { (finish: Bool) -> () in
        toast.removeFromSuperview()
        objc_setAssociatedObject(self, &HRToastTimer, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }

    if force {
        completeClosure(true)
    } else {
        UIView.animate(withDuration: HRToastFadeDuration,
                                   delay: 0.0,
                                   options: ([.curveEaseIn, .beginFromCurrentState]),
                                   animations: {
                                    toast.alpha = 0.0
        },
                                   completion:completeClosure)
    }
}

@objc func toastTimerDidFinish(timer: Timer) {
    self.hideToast(toast: timer.userInfo as! UIView)
}

@objc func handleToastTapped(recognizer: UITapGestureRecognizer) {

    // var timer = objc_getAssociatedObject(self, &HRToastTimer) as! NSTimer
    // timer.invalidate()

    self.hideToast(toast: recognizer.view!)
}

func centerPointForPosition(position: AnyObject, toast: UIView) -> CGPoint {
    if position is String {
        let toastSize = toast.bounds.size
        let viewSize  = self.bounds.size
        if position.lowercased == HRToastPositionTop {
            return CGPoint(x: viewSize.width/2, y: toastSize.height/2 + HRToastVerticalMargin)

        } else if position.lowercased == HRToastPositionDefault {
            return CGPoint(x:viewSize.width/2, y:viewSize.height - toastSize.height - 15 - HRToastVerticalMargin)
        } else if position.lowercased == HRToastPositionCenter {
            return CGPoint(x:viewSize.width/2, y:viewSize.height/2)
        }
    } else if position is NSValue {
        return position.cgPointValue
    }

    print("Warning: Invalid position for toast.")
    return self.centerPointForPosition(position: HRToastPositionDefault as AnyObject, toast: toast)
}

func viewForMessage(msg: String?, title: String?, image: UIImage?) -> UIView? {
    if msg == nil && title == nil && image == nil { return nil }

    var msgLabel: UILabel?
    var titleLabel: UILabel?
    var imageView: UIImageView?

    let wrapperView = UIView()
    wrapperView.autoresizingMask = ([.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottomMargin])
    wrapperView.layer.cornerRadius = HRToastCornerRadius
    wrapperView.backgroundColor = UIColor.black.withAlphaComponent(HRToastOpacity)

    if HRToastDisplayShadow {
        wrapperView.layer.shadowColor = UIColor.black.cgColor
        wrapperView.layer.shadowOpacity = Float(HRToastShadowOpacity)
        wrapperView.layer.shadowRadius = HRToastShadowRadius
        wrapperView.layer.shadowOffset = HRToastShadowOffset
    }

    if image != nil {
        imageView = UIImageView(image: image)
        imageView!.contentMode = .scaleAspectFit
        imageView!.frame = CGRect(x:HRToastHorizontalMargin, y: HRToastVerticalMargin, width: CGFloat(HRToastImageViewWidth), height: CGFloat(HRToastImageViewHeight))
    }

    var imageWidth: CGFloat, imageHeight: CGFloat, imageLeft: CGFloat
    if imageView != nil {
        imageWidth = imageView!.bounds.size.width
        imageHeight = imageView!.bounds.size.height
        imageLeft = HRToastHorizontalMargin
    } else {
        imageWidth  = 0.0; imageHeight = 0.0; imageLeft   = 0.0
    }

    if title != nil {
        titleLabel = UILabel()
        titleLabel!.numberOfLines = HRToastMaxTitleLines
        titleLabel!.font = UIFont.boldSystemFont(ofSize: HRToastFontSize)
        titleLabel!.textAlignment = .center
        titleLabel!.lineBreakMode = .byWordWrapping
        titleLabel!.textColor = UIColor.white
        titleLabel!.backgroundColor = UIColor.clear
        titleLabel!.alpha = 1.0
        titleLabel!.text = title

        // size the title label according to the length of the text

        let maxSizeTitle = CGSize(width: (self.bounds.size.width * HRToastMaxWidth) - imageWidth, height: self.bounds.size.height * HRToastMaxHeight)

        let expectedHeight = title!.stringHeightWithFontSize(fontSize: HRToastFontSize, width: maxSizeTitle.width)
        titleLabel!.frame = CGRect(x: 0.0, y: 0.0, width: maxSizeTitle.width, height: expectedHeight)
    }

    if msg != nil {
        msgLabel = UILabel();
        msgLabel!.numberOfLines = HRToastMaxMessageLines
        msgLabel!.font = UIFont.systemFont(ofSize: HRToastFontSize)
        msgLabel!.lineBreakMode = .byWordWrapping
        msgLabel!.textAlignment = .center
        msgLabel!.textColor = UIColor.white
        msgLabel!.backgroundColor = UIColor.clear
        msgLabel!.alpha = 1.0
        msgLabel!.text = msg


        let maxSizeMessage = CGSize(width: (self.bounds.size.width * HRToastMaxWidth) - imageWidth, height: self.bounds.size.height * HRToastMaxHeight)
        let expectedHeight = msg!.stringHeightWithFontSize(fontSize: HRToastFontSize, width: maxSizeMessage.width)
        msgLabel!.frame = CGRect(x: 0.0, y: 0.0, width: maxSizeMessage.width, height: expectedHeight)
    }

    var titleWidth: CGFloat, titleHeight: CGFloat, titleTop: CGFloat, titleLeft: CGFloat
    if titleLabel != nil {
        titleWidth = titleLabel!.bounds.size.width
        titleHeight = titleLabel!.bounds.size.height
        titleTop = HRToastVerticalMargin
        titleLeft = imageLeft + imageWidth + HRToastHorizontalMargin
    } else {
        titleWidth = 0.0; titleHeight = 0.0; titleTop = 0.0; titleLeft = 0.0
    }

    var msgWidth: CGFloat, msgHeight: CGFloat, msgTop: CGFloat, msgLeft: CGFloat
    if msgLabel != nil {
        msgWidth = msgLabel!.bounds.size.width
        msgHeight = msgLabel!.bounds.size.height
        msgTop = titleTop + titleHeight + HRToastVerticalMargin
        msgLeft = imageLeft + imageWidth + HRToastHorizontalMargin
    } else {
        msgWidth = 0.0; msgHeight = 0.0; msgTop = 0.0; msgLeft = 0.0
    }

    let largerWidth = max(titleWidth, msgWidth)
    let largerLeft  = max(titleLeft, msgLeft)

    // set wrapper view's frame
    let wrapperWidth  = max(imageWidth + HRToastHorizontalMargin * 2, largerLeft + largerWidth + HRToastHorizontalMargin)
    let wrapperHeight = max(msgTop + msgHeight + HRToastVerticalMargin, imageHeight + HRToastVerticalMargin * 2)
    wrapperView.frame = CGRect(x: 0.0, y: 0.0, width: wrapperWidth, height: wrapperHeight)

    // add subviews
    if titleLabel != nil {
        titleLabel!.frame = CGRect(x: titleLeft, y: titleTop, width: titleWidth, height: titleHeight)
        wrapperView.addSubview(titleLabel!)
    }
    if msgLabel != nil {
        msgLabel!.frame = CGRect(x: msgLeft, y: msgTop, width: msgWidth, height: msgHeight)
        wrapperView.addSubview(msgLabel!)
    }
    if imageView != nil {
        wrapperView.addSubview(imageView!)
    }

    return wrapperView
    }

    }

extension String {

func stringHeightWithFontSize(fontSize: CGFloat,width: CGFloat) -> CGFloat {
    let font = UIFont.systemFont(ofSize: fontSize)
    let size = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.lineBreakMode = .byWordWrapping;
    let attributes = [NSAttributedStringKey.font:font,
                      NSAttributedStringKey.paragraphStyle:paragraphStyle.copy()]

    let text = self as NSString
    let rect = text.boundingRect(with: size, options:.usesLineFragmentOrigin, attributes: attributes, context:nil)
    return rect.size.height
}
}

ব্যবহার:

  self.view.makeToast(message: "Simple Toast")
  self.view.makeToast(message: "Simple Toast", duration: 2.0, position:HRToastPositionTop)

  self.view.makeToast(message: "Simple Toast", duration: 2.0, position: HRToastPositionCenter, image: UIImage(named: "ic_120x120")!)

  self.view.makeToast(message: "It is just awesome", duration: 2.0, position: HRToastPositionDefault, title: "Simple Toast")

  self.view.makeToast(message: "It is just awesome", duration: 2.0, position: HRToastPositionCenter, title: "Simple Toast", image: UIImage(named: "ic_120x120")!)

  self.view.makeToastActivity()
  self.view.makeToastActivity(position: HRToastPositionCenter)
  self.view.makeToastActivity(position: HRToastPositionDefault, message: "Loading")
  self.view.makeToastActivityWithMessage(message: "Loading")

  // Hide Toast
  self.view.hideToast(toast: self.view)
  self.view.hideToast(toast: self.view, force: true)
  self.view.hideToastActivity()

এই কোড অনেক ত্রুটি .. সজীব (সময়কাল, শুধু অনেকগুলি ত্রুটির কেন্দ্র, whiteColor সাদা, animateWithDuration করার .Center মত পরিবর্তন .. দয়া করে এটি ঠিক ..
সিদ্ধার্থ

2

যেগুলি জাআমারিন.আইওএস ব্যবহার করে আপনি এটি করতে পারেন:

new UIAlertView(null, message, null, "OK", null).Show();

ইউআইকিট ব্যবহার করে; দরকার.


2

আমার জন্য এই সমাধানটি ভাল কাজ করে: https://github.com/cruffenach/CRToast

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

এটি কীভাবে ব্যবহার করবেন তা উদাহরণ:

    NSDictionary *options = @{
                          kCRToastTextKey : @"Hello World!",
                          kCRToastTextAlignmentKey : @(NSTextAlignmentCenter),
                          kCRToastBackgroundColorKey : [UIColor redColor],
                          kCRToastAnimationInTypeKey : @(CRToastAnimationTypeGravity),
                          kCRToastAnimationOutTypeKey : @(CRToastAnimationTypeGravity),
                          kCRToastAnimationInDirectionKey : @(CRToastAnimationDirectionLeft),
                          kCRToastAnimationOutDirectionKey : @(CRToastAnimationDirectionRight)
                          };
[CRToastManager showNotificationWithOptions:options
                            completionBlock:^{
                                NSLog(@"Completed");
                            }];

2

3 সেকেন্ড বিলম্বের জন্য সুইফট 4 সিনট্যাক্স:

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

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {                 
    self.dismiss(animated: true, completion: nil)     
} 

কি দারুন. আপনার কোডটি আমাকে কী করবে সে সম্পর্কে আমার ধারণা দিয়েছিল সেখানে আমার এই জাতীয় সমস্যা ছিল had ধন্যবাদ :)
আল ওয়ালিদ আশিক

1

সতর্কতা ব্যবহার করে অ্যান্ড্রয়েড টোস্টের দ্রুত কার্যকরকরণ যা 3 সেকেন্ডের পরে বিলুপ্ত হয়।

    func showAlertView(title: String?, message: String?) {
    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    let okAction = UIAlertAction(title: "OK", style: .Cancel, handler: nil)
    alertController.addAction(okAction)
    self.presentViewController(alertController, animated: true, completion: nil)


    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(3 * Double(NSEC_PER_SEC)))
    dispatch_after(delayTime, dispatch_get_main_queue()) {
        print("Bye. Lovvy")
        alertController.dismissViewControllerAnimated(true, completion: nil)
    }
}

এটিকে সহজভাবে কল করতে:

self.showAlertView("Message sent...", message: nil)

1

সুইফট ২.০ এর জন্য এবং https://stackoverflow.com/a/5079536/6144027 বিবেচনা করে

                //TOAST
                let alertController = UIAlertController(title: "", message: "This is a Toast.LENGTH_SHORT", preferredStyle: .Alert)
                self!.presentViewController(alertController, animated: true, completion: nil)
                let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(2.0 * Double(NSEC_PER_SEC)))
                dispatch_after(delayTime, dispatch_get_main_queue()) {
                    alertController.dismissViewControllerAnimated(true, completion: nil)
                }

1

আপনার সমাধানটি এখানে:
আপনার এক্সকোড প্রকল্পে কোডের নীচে রাখুন এবং উপভোগ করুন,

- (void)showMessage:(NSString*)message atPoint:(CGPoint)point {
const CGFloat fontSize = 16;

UILabel* label = [[UILabel alloc] initWithFrame:CGRectZero];
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont fontWithName:@"Helvetica-Bold" size:fontSize];
label.text = message;
label.textColor = UIColorFromRGB(0x07575B);
[label sizeToFit];

label.center = point;

[self.view addSubview:label];

[UIView animateWithDuration:0.3 delay:1 options:0 animations:^{
    label.alpha = 0;
} completion:^(BOOL finished) {
    label.hidden = YES;
    [label removeFromSuperview];
}];
}

ব্যবহারবিধি ?

[self showMessage:@"Toast in iOS" atPoint:CGPointMake(160, 695)];

0

আবার যদি জ্যামারিনে আইওএস ব্যবহার করা হয় তবে উপাদান স্টোরটিতে বিটিপিগ্রোগ্রেসইচডি নামে একটি নতুন উপাদান রয়েছে


0

1) এই লিঙ্কটি থেকে টোস্ট-বিজ্ঞপ্তি-আইওএস ডাউনলোড করুন

2) লক্ষ্যগুলিতে যান -> পর্যায়গুলি তৈরি করুন এবং যুক্ত করুন -fno-objc-arc এবং প্রাসঙ্গিক ফাইলগুলির জন্য "সংকলক উত্স" এ

3) একটি ফাংশন করা এবং #import "iToast.h"

-(void)showToast :(NSString *)strMessage {
    iToast * objiTost = [iToast makeText:strMessage];
    [objiTost setFontSize:11];
    [objiTost setDuration:iToastDurationNormal];
    [objiTost setGravity:iToastGravityBottom];
    [objiTost show];
}

4) কল করুন যেখানে আপনাকে টোস্ট বার্তা প্রদর্শন করতে হবে

[self showToast:@"This is example text."];

0

আমি টোস্টটি করার সহজ উপায়টি ভেবেছিলাম! বোতাম ছাড়াই ইউআইআইএলআরটিস কনট্রোলার ব্যবহার করছে! আমরা বাটন পাঠ্যটি আমাদের বার্তা হিসাবে ব্যবহার করি! এটা নাও? নীচে কোড দেখুন:

func alert(title: String?, message: String?, bdy:String) {
    let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    let okAction = UIAlertAction(title: bdy, style: .Cancel, handler: nil)
    alertController.addAction(okAction)
        self.presentViewController(alertController, animated: true, completion: nil)


    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC)))
    dispatch_after(delayTime, dispatch_get_main_queue()) {
        //print("Bye. Lovvy")
        alertController.dismissViewControllerAnimated(true, completion: nil) 
    }    
}

এটি এর মতো ব্যবহার করুন:

self.alert(nil,message:nil,bdy:"Simple Toast!") // toast
self.alert(nil,message:nil,bdy:"Alert") // alert with "Alert" button

0

আমি সুইফট ৩.০ এ এভাবেই করেছি। আমি ইউআইভিউ এক্সটেনশন তৈরি করেছি এবং সেল্ফ.ভিউ.শো টোস্টকে (বার্তা: "এখানে বার্তা", সময়কাল: 3.0) এবং সেলফ ভিউ.হাইডটাইস্ট ()

extension UIView{
var showToastTag :Int {return 999}

//Generic Show toast
func showToast(message : String, duration:TimeInterval) {

    let toastLabel = UILabel(frame: CGRect(x:0, y:0, width: (self.frame.size.width)-60, height:64))

    toastLabel.backgroundColor = UIColor.gray
    toastLabel.textColor = UIColor.black
    toastLabel.numberOfLines = 0
    toastLabel.layer.borderColor = UIColor.lightGray.cgColor
    toastLabel.layer.borderWidth = 1.0
    toastLabel.textAlignment = .center;
    toastLabel.font = UIFont(name: "HelveticaNeue", size: 17.0)
    toastLabel.text = message
    toastLabel.center = self.center
    toastLabel.isEnabled = true
    toastLabel.alpha = 0.99
    toastLabel.tag = showToastTag
    toastLabel.layer.cornerRadius = 10;
    toastLabel.clipsToBounds  =  true
    self.addSubview(toastLabel)

    UIView.animate(withDuration: duration, delay: 0.1, options: .curveEaseOut, animations: {
        toastLabel.alpha = 0.95
    }, completion: {(isCompleted) in
        toastLabel.removeFromSuperview()
    })
}

//Generic Hide toast
func hideToast(){
    if let view = self.viewWithTag(self.showToastTag){
        view.removeFromSuperview()
    }
  }
}

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