زر لفتح جهات الاتصال
السلام عليكم ورحمة الله وبركاته
اخواني انا بغيت زر يفتح لي جهات الاتصال ( الأسماء ) و اذا اخترت اسم اي شخص من الاسماء ياخذ رقم الجوال و يتصل عليه .
طبعاً اللغة سويفت .
ويعطيكم العافية.
الإجابة الصحيحة
import UIKit
import ContactsUI
class ViewController: UIViewController, CNContactPickerDelegate {
let contactPicker = CNContactPickerViewController()
override func viewDidLoad() {
super.viewDidLoad()
contactPicker.delegate = self
}
@IBAction func contatcButtonClicked(_ sender: UIButton) {
present(contactPicker, animated: true)
}
// Delegate's Methods
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
contact.phoneNumbers.forEach { (contactValue) in
let str = removeSpacesInNumbers(string: contactValue.value.stringValue)
makeCall(str)
}
}
func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
contactPicker.dismiss(animated: true, completion: nil)
}
func makeCall(_ string: String) {
print(string)
if string.isValid(regex: .phone) {
if let url = URL(string: "tel://\(string)"), UIApplication.shared.canOpenURL(url) {
if #available(iOS 10, *) {
UIApplication.shared.open(url)
} else {
UIApplication.shared.openURL(url)
}
}
} else {
print(string)
}
}
func removeSpacesInNumbers(string: String) -> String {
var str = ""
// Remove any spaces or any special characters.
for char in string {
if char == "+" || (char >= "0" && char <= "9") {
str.append(char)
}
}
return str
}
}
extension String {
// Regular Expressions works for this format:
// 05xxxxxxxx(8)
// +9665xxxxxxxx(8)
enum RegularExpressions: String {
case phone = "^\\+9665\\d{8}|05\\d{8}$"
}
func isValid(regex: RegularExpressions) -> Bool {
return isValid(regex: regex.rawValue)
}
func isValid(regex: String) -> Bool {
let matches = range(of: regex, options: .regularExpression)
return matches != nil
}
}
هذا كامل الكود
الإجابات (6)
هاذا الكود كامل في حين انا اجرب الأرقام على الايفون حقي
Ahmed: ممكن ترسل الأرقام ، لاني اختبرت ما يقارب ١٠ ارقام كلها نجحت ..
عبدالرحمن الخالدي: الاختبار اللي اختبرته على الايفون حقك ولا على الـSimulator
Ahmed: Unit Testing == XCTest
عبدالرحمن الخالدي: وش معناها هاذي اخوي او وش فايدتها و معليش والله تعبتك معي يالغالي
Ahmed: هذي مكتبة تستخدم للإختبار التطبيق ، انا استخدمت الـSimulator ، Unite Test ونجحت كل الإختبارات .. تأكد من الأكواد عندك !!
كذا مضبوط ولا اخوي ؟
Ahmed: صحيح ، كيف حافظ الأرقام في جوالك ؟ ٩٩٦٥xxxxxxx او تبدأ ب +
عبدالرحمن الخالدي: تبدأ ب +966 او الرقم مباشرة 05xxx
Ahmed: اذاََ الفورمات خطأ ، بعدلها واسوي لها اختبار واذا نجحت بعدل الإجابة
عبدالرحمن الخالدي: ممتاز ،انا بانتظارك ويعطيك العافية
Ahmed: يعافيك ، عدلت اجاتبي في الصفحة الآولى ، الآن راح يشتغل تمام ، جربته في جوالي والـ Unit Testing والـ Simulator. اذا اشتغل معاك ياليت تقبل الآجابة علشان نقفل النقاش في هذا السؤال (:
ممكن تصحيح للخطا هاذا خيي
Ahmed: رقم ٧٩ و ٨١ ليش داخل الـمثد ؟ غير مكانهم داخل viewDidLoad
Ahmed: لحظة انزل كامل الكود
import UIKit
import ContactsUI
class ViewController: UIViewController, CNContactPickerDelegate {
let contactPicker = CNContactPickerViewController()
override func viewDidLoad() {
super.viewDidLoad()
contactPicker.delegate = self
}
@IBAction func contatcButtonClicked(_ sender: UIButton) {
present(contactPicker, animated: true)
}
// Delegate's Methods
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
contact.phoneNumbers.forEach { (contactValue) in
let str = removeSpacesInNumbers(string: contactValue.value.stringValue)
makeCall(str)
}
}
func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
contactPicker.dismiss(animated: true, completion: nil)
}
func makeCall(_ string: String) {
print(string)
if string.isValid(regex: .phone) {
if let url = URL(string: "tel://\(string)"), UIApplication.shared.canOpenURL(url) {
if #available(iOS 10, *) {
UIApplication.shared.open(url)
} else {
UIApplication.shared.openURL(url)
}
}
} else {
print(string)
}
}
func removeSpacesInNumbers(string: String) -> String {
var str = ""
// Remove any spaces or any special characters.
for char in string {
if char == "+" || (char >= "0" && char <= "9") {
str.append(char)
}
}
return str
}
}
extension String {
// Regular Expressions works for this format:
// 05xxxxxxxx(8)
// +9665xxxxxxxx(8)
enum RegularExpressions: String {
case phone = "^\\+9665\\d{8}|05\\d{8}$"
}
func isValid(regex: RegularExpressions) -> Bool {
return isValid(regex: regex.rawValue)
}
func isValid(regex: String) -> Bool {
let matches = range(of: regex, options: .regularExpression)
return matches != nil
}
}
هذا كامل الكود
Ahmed: اذا نسخت هذا الكود ، تأكد ان الـ آبي اكشن يطابق الاسم اللي انت عرفته اللي هو tty ، انسخ هذا الكود وعدل اسم الابي اكشن فقط
حبيبنا طلعت عندي مشكلة وبسيطه ان شاء الله وهي ان الارقام اللي مكتوبه بالارقام العربيه ماتشتغل معي بس الانقليزية مدري اذا لها حل هاذي المشكلة ياليت تعدلها في إجابتك.
ويعطيك العافية
Ahmed: اللي اعرفه ان الأرقام تلقائياََ تتحول للغة الآنقليزية ، تطبيق الفون ما يقبل ارقام غير الأنقليزية. بمكانك تسوي خوارزمية بسيطة للتحويل وتنحل المشكلة
عبدالرحمن الخالدي: كيف أسوي هاذي الخوارزمية اخوي.
let numbers: [Character: String] = ["٠": "0", "١": "1", "٢": "2", "٣": "3","٤": "4",
"٥": "5", "٦": "6", "٧": "7", "٨": "8", "٩": "9"]
func arabicToEnglish(arabicNumber: String) -> String {
var englishNumber = ""
for digit in arabicNumber {
if let englishDigit = numbers[digit] {
englishNumber += englishDigit
}
}
return englishNumber
}
تفضل ، هذي خوارزمية بسيطة لتحويل الأرقام من اللغة العربية للغة الأنقليزية
عبدالرحمن الخالدي: حلوين لكن هاذي احطها داخل الزر ولا برا
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !