دسترسی Button action روی tableview نسخه swift 3
درود خدمت شما . من یک سری دکمه دارم روی هر سلول تیبل view که یک سری کاری رو انجام می ده مثلا از سرور یک سری داده می یارم که همراهشون id هم هست با زدن بر روی دکمه روی هر سلول id ( سلول مورد نظر ) را پرینت بگیرد
خیلی جستجو کردم متاسفانه قبلا هم این مشکل داشتم اون موقع با هزار تا کار بلخره درست شده بود و می اومد جایگاه رو می گیرفت و ... که زیاد کاربردی نبود باز مشکل داشتم
این آموزش را در استک پیدا کردم
http://stackoverflow.com/questions/28894765/ios-swift-button-action-in-table-view-cell
در پست دومش حتی کد برای swift3 قرار داده ولی من نتونستم اون رو اجرا کنم شاید کلا دارم بد انجام می دم
مراحل کاری که انجام دادم :
۱. در فایل uitabaleviewcell اومدم دکمه ای که روی هر سلول قرار دادم را به صورت یک اکشن تعریف کردم
۲. در مرحله بعدی به فایل کنترلرم برگشتم و در فانکشن cellForRowAt اومدم کد زیر را قرار دادم
PartyCell.myBut.addTarget(self, action: #selector(PartyCell.myBut.buttonTapped), for: .touchUpInside)
با کد بالا متاسفانه ارور زیر را می دهد
از این مرحله دیگه جلوتر نمی تونم برم متاسفانه بخاطر اروری که داره . حالا من دارم اشتباه می رم یا کدی که دارم قرار می دم اشتباه هست فکر می کنم خیلی از دوستان به این مورد برای حذف یا مثلا لیست دوست داشتی ها و .... نیاز دارند مخصوصا روی swift 3
با تشکر
درود من کلا اشتباه متوجه شده بودم الان توضیح می دم و یک سوال هم دارم
برای اینکه کد کار بکنه در خود cell شما باید به صورت یک outlet تعریف کنید نه اکشن . بعد در cellForRowAt بیایید مثل لیبل ها فراخوانی می کنید به صورت زیر انجام بدید
cell.butVars.tag = indexPath.row
cell.butVars.addTarget(self, action: #selector(funcname(_:)), for: .touchUpInside)
حالا بیایید funcname رو به صورت زیر تعریف کنید
func funcname(_ sender:UIButton) {
let buttonTag = sender.tag
print(buttonTag)
}
کد بسیار زیبا کار می کنه ولی یک مشکلی که پیش اومده برام وقتی من پرینت می زنم دقیقا همه چیز اوکی هست ولی وقتی می یام روی کدام تو کنسول این ارور می ده
This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
جستجو کردم گفتند شما باید این رو در ترد main قرار بدید درست می شه ولی من اصلا گرافیک نزدم فقط پرینت گرفتم و اصلا ممکن هست این دستورات به کل مثلا چیزی رو در دیتابیس ذخیره کنه و ui نداشته باشه . برای این وارنینگ باید چیکار کرد ؟
#به روز رسانی
کد های زیر رو جایی که گرافیک یا کد بوده زدم حل شد
DispatchQueue.global(qos: .userInitiated).async {
DispatchQueue.main.async {
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .

