আইওএস এর জন্য To Do অ্যাপ তৈরি

আমরা এর আগে আমরা আইওএস  টেবিল ভিউ নিয়ে কাজ করেছি। এবার টেবিল ভিউকে কাজে লাগিয়ে কিভাবে আমরা একটা অ্যাপ তৈরি করতে পারি, তা দেখব। তার জন্য আমরা একটা To Do অ্যাপ তৈরি করব।

 

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

 

টেক্সট ফিল্ড, টেবিল ভিউ এবং বাটন ViewControlar.swift এর সাথে যুক্ত করি। এখানে বাটন হবে Action. বাটনে যখন ক্লিক হবে, তখন টেক্সট ফিল্ড থেকে আইটেম টেবিল ভিউতে যুক্ত করবে। বাটন ViewControlar.swift এ যুক্ত করার সময় নাম দিয়েছি addTodo

আমরা একটা শূন্য অ্যারে তৈরি করে নিব। যেটাতে আমরা আমাদের টু ডু আইটেম গুলো যুক্ত করব। যেমনঃ var items = [String]()
আমরা জানি টেবিল ভিউ ব্যবহার করার জন্য আমাদের দুইটা মেথড অবশ্যই ইম্পপ্লিমেন্ট করতে হবে। সে গুলো হচ্ছেঃ


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
     
 
}
 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
     
 
}

 

numberOfRowsInSection হবে আমাদের অ্যারে সাইজ। আর আমরা প্রতিটা রোতে দেখাবো হচ্ছে অ্যারের মধ্যে থাকা স্ট্রিং গুলো। তার জন্যঃ

 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        
        return items.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
        
        cell.textLabel?.text = items[indexPath.row]
        
        return cell
        
    }

 

আমাদের অ্যাপ অর্ধেক তৈরি হয়ে গিয়েছে। যদিও এতটুকু আমরা টেবিল ভিউ থেকেই শিখেছি। এখন বাটনে যখন ক্লিক করবে, তখন টেক্সট ফিল্ড থেকে আইটেমটি অ্যারেতে যুক্ত করতে হবে। তার জন্য লিখবঃ


    @IBAction func addToDo(sender: AnyObject) {
        
        let newItem = textField.text
        items.append(newItem!)
        textField.resignFirstResponder()
        textField.text = ""
        tableView.reloadData()
        
    }

 

এখানে tableView.reloadData() দেওয়ার কারণ হচ্ছে আমরা যখন একটি আইটেম যুক্ত করেছি অ্যারেতে, আমাদের টেবিল ভিউ তা জানে না। এ জন্যই টেবিল ভিউ রিলোড করেছি। এতটুকু লেখার পর আমরা যদি অ্যাপ রান করি, তাহলে আমরা দেখতে পাবো আমাদের অ্যাপ কাজ করছে। আমরা আমাদের টু ডু অ্যাপে টু ডু আইটেম যুক্ত করতে পারছি। এখন পর্যন্ত লেখা সম্পুর্ণ ViewCOntrolar.swift ফাইলঃ


import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    
    @IBOutlet var tableView: UITableView!
    
    
    
    @IBOutlet var textField: UITextField!
    var items = [String]()

    @IBAction func addToDo(sender: AnyObject) {
        
        let newItem = textField.text
        items.append(newItem!)
        textField.resignFirstResponder()
        textField.text = ""
        tableView.reloadData()
        
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
       
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        
        return items.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
        
        cell.textLabel?.text = items[indexPath.row]
        
        return cell
        
    }
    
}


আমারা আরেকটু কাজ করতে পারি। যেমন আমরা যদি টু ডু এর কোন কাজ করে ফেলি, তাহলে তাতে টিক চিহ্ন দিতে পারি। তার জন্য লিখব এভাবেঃ

    // select and mark an item
    
    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
        let selectedRow = tableView.cellForRowAtIndexPath(indexPath)!
        if selectedRow.accessoryType == UITableViewCellAccessoryType.None {
            selectedRow.accessoryType = UITableViewCellAccessoryType.Checkmark
            selectedRow.tintColor = UIColor.greenColor()
            
        }else{
            selectedRow.accessoryType = UITableViewCellAccessoryType.None
        }
        
    }

আমরা যদি ভুলে কোন আইটেম যুক্ত করে ফেলি, তাহলে তা রিমুভ করে দিব। তার জন্য লিখব এভাবেঃ

 // delete an item
    
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        let deletedRow:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
        
        if(editingStyle == UITableViewCellEditingStyle.Delete){
            items.removeAtIndex(indexPath.row)
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
            deletedRow.accessoryType = UITableViewCellAccessoryType.None
        
        
        }// end if
        
    }// end delete an item method

অ্যাপটা রান করলে দেখতে পারব আমরা মোটামুটি পূর্নাঙ্গ একটা টু ডু অ্যাপ তৈরি হয়ে গিয়েছে। কত অল্প কিছু কোড লিখতে হয়েছে আমাদের। সম্পুর্ণ ViewControlar.swift



import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    
    @IBOutlet var tableView: UITableView!
    
    
    
    @IBOutlet var textField: UITextField!
    var items = [String]()

    @IBAction func addToDo(sender: AnyObject) {
        
        let newItem = textField.text
        items.append(newItem!)
        textField.resignFirstResponder()
        textField.text = ""
        tableView.reloadData()
        
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
       
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        
        return items.count
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
        
        cell.textLabel?.text = items[indexPath.row]
        
        return cell
        
    }
    
    
    // select an item
    
    func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
        let selectedRow = tableView.cellForRowAtIndexPath(indexPath)!
        if selectedRow.accessoryType == UITableViewCellAccessoryType.None {
            selectedRow.accessoryType = UITableViewCellAccessoryType.Checkmark
            selectedRow.tintColor = UIColor.greenColor()
            
        }else{
            selectedRow.accessoryType = UITableViewCellAccessoryType.None
        }
        
    }
    
    
    // delete an item
    
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        let deletedRow:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
        
        if(editingStyle == UITableViewCellEditingStyle.Delete){
            items.removeAtIndex(indexPath.row)
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
            deletedRow.accessoryType = UITableViewCellAccessoryType.None
        
        
        }// end if
        
    }// end delete an item method
    
}


Leave a Reply