NSTableView Tab Between Columns and move to next row









up vote
0
down vote

favorite












Use Case:



This is a data entry scenario where the user needs to modify the data in three columns of a view based NSTableView; qty, item number and price. The objective is to keep the users hands on the keyboard and diminish the need for mouse'ing around the table to perform edits.



Detailed UI:



When tabbing within a row, the next column should become selected and editable which is (can be) the default behavior of a NSTableView. However, when in the last column (price) is being edited and tabbing out, it should wrap to the next available row, column 0 (qty) and allow the user to continue editing.



Likewise, backtab should be supported within a row, and when in the first column (qty) and backtabbing it should wrap up the the prior row, last column (price). If they are on row 0, column 0, it should wrap down to the last row, last column.



So essentially the user should be able to navigate and edit any row, column with tab or backtab presses.



While there are several solutions, using keyDown, keyUp, notifications etc a lot of it is older ObjC Code and not very Swifty.



Typically questions should include some kind of code but since I have a solution that works, I am including it as an answer so hopefully it will help a future reader.



Question:



Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters.










share|improve this question





















  • Is "Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters." still a question or is it a summary?
    – Willeke
    Nov 10 at 17:32










  • @Willeke Thanks for the comment. It's both actually. It took a considerable amount of research and time to craft a working solution so I thought I would share it with others but there could certainly be options that may provide shorter or cleaner code to achieve the same results. So it is a question. I try to keep on topic and follow the guide when answering or asking here on SO, so if it's not beneficial to others I can delete.
    – Jay
    Nov 10 at 21:13















up vote
0
down vote

favorite












Use Case:



This is a data entry scenario where the user needs to modify the data in three columns of a view based NSTableView; qty, item number and price. The objective is to keep the users hands on the keyboard and diminish the need for mouse'ing around the table to perform edits.



Detailed UI:



When tabbing within a row, the next column should become selected and editable which is (can be) the default behavior of a NSTableView. However, when in the last column (price) is being edited and tabbing out, it should wrap to the next available row, column 0 (qty) and allow the user to continue editing.



Likewise, backtab should be supported within a row, and when in the first column (qty) and backtabbing it should wrap up the the prior row, last column (price). If they are on row 0, column 0, it should wrap down to the last row, last column.



So essentially the user should be able to navigate and edit any row, column with tab or backtab presses.



While there are several solutions, using keyDown, keyUp, notifications etc a lot of it is older ObjC Code and not very Swifty.



Typically questions should include some kind of code but since I have a solution that works, I am including it as an answer so hopefully it will help a future reader.



Question:



Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters.










share|improve this question





















  • Is "Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters." still a question or is it a summary?
    – Willeke
    Nov 10 at 17:32










  • @Willeke Thanks for the comment. It's both actually. It took a considerable amount of research and time to craft a working solution so I thought I would share it with others but there could certainly be options that may provide shorter or cleaner code to achieve the same results. So it is a question. I try to keep on topic and follow the guide when answering or asking here on SO, so if it's not beneficial to others I can delete.
    – Jay
    Nov 10 at 21:13













up vote
0
down vote

favorite









up vote
0
down vote

favorite











Use Case:



This is a data entry scenario where the user needs to modify the data in three columns of a view based NSTableView; qty, item number and price. The objective is to keep the users hands on the keyboard and diminish the need for mouse'ing around the table to perform edits.



Detailed UI:



When tabbing within a row, the next column should become selected and editable which is (can be) the default behavior of a NSTableView. However, when in the last column (price) is being edited and tabbing out, it should wrap to the next available row, column 0 (qty) and allow the user to continue editing.



Likewise, backtab should be supported within a row, and when in the first column (qty) and backtabbing it should wrap up the the prior row, last column (price). If they are on row 0, column 0, it should wrap down to the last row, last column.



So essentially the user should be able to navigate and edit any row, column with tab or backtab presses.



While there are several solutions, using keyDown, keyUp, notifications etc a lot of it is older ObjC Code and not very Swifty.



Typically questions should include some kind of code but since I have a solution that works, I am including it as an answer so hopefully it will help a future reader.



Question:



Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters.










share|improve this question













Use Case:



This is a data entry scenario where the user needs to modify the data in three columns of a view based NSTableView; qty, item number and price. The objective is to keep the users hands on the keyboard and diminish the need for mouse'ing around the table to perform edits.



Detailed UI:



When tabbing within a row, the next column should become selected and editable which is (can be) the default behavior of a NSTableView. However, when in the last column (price) is being edited and tabbing out, it should wrap to the next available row, column 0 (qty) and allow the user to continue editing.



Likewise, backtab should be supported within a row, and when in the first column (qty) and backtabbing it should wrap up the the prior row, last column (price). If they are on row 0, column 0, it should wrap down to the last row, last column.



So essentially the user should be able to navigate and edit any row, column with tab or backtab presses.



While there are several solutions, using keyDown, keyUp, notifications etc a lot of it is older ObjC Code and not very Swifty.



Typically questions should include some kind of code but since I have a solution that works, I am including it as an answer so hopefully it will help a future reader.



Question:



Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters.







swift macos






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 17:14









Jay

17.9k42848




17.9k42848











  • Is "Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters." still a question or is it a summary?
    – Willeke
    Nov 10 at 17:32










  • @Willeke Thanks for the comment. It's both actually. It took a considerable amount of research and time to craft a working solution so I thought I would share it with others but there could certainly be options that may provide shorter or cleaner code to achieve the same results. So it is a question. I try to keep on topic and follow the guide when answering or asking here on SO, so if it's not beneficial to others I can delete.
    – Jay
    Nov 10 at 21:13

















  • Is "Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters." still a question or is it a summary?
    – Willeke
    Nov 10 at 17:32










  • @Willeke Thanks for the comment. It's both actually. It took a considerable amount of research and time to craft a working solution so I thought I would share it with others but there could certainly be options that may provide shorter or cleaner code to achieve the same results. So it is a question. I try to keep on topic and follow the guide when answering or asking here on SO, so if it's not beneficial to others I can delete.
    – Jay
    Nov 10 at 21:13
















Is "Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters." still a question or is it a summary?
– Willeke
Nov 10 at 17:32




Is "Can you suggest a simpler solution of how to navigate a view based tableview based on the above parameters." still a question or is it a summary?
– Willeke
Nov 10 at 17:32












@Willeke Thanks for the comment. It's both actually. It took a considerable amount of research and time to craft a working solution so I thought I would share it with others but there could certainly be options that may provide shorter or cleaner code to achieve the same results. So it is a question. I try to keep on topic and follow the guide when answering or asking here on SO, so if it's not beneficial to others I can delete.
– Jay
Nov 10 at 21:13





@Willeke Thanks for the comment. It's both actually. It took a considerable amount of research and time to craft a working solution so I thought I would share it with others but there could certainly be options that may provide shorter or cleaner code to achieve the same results. So it is a question. I try to keep on topic and follow the guide when answering or asking here on SO, so if it's not beneficial to others I can delete.
– Jay
Nov 10 at 21:13













1 Answer
1






active

oldest

votes

















up vote
0
down vote













First is to subClass a view based NSTableView set set it up like this



class ItemTableView: NSTableView, NSTableViewDataSource, NSTableViewDelegate, NSTextFieldDelegate {


I have a tableView dataSource called transactionArray which holds the items to be displayed within the tableView. I also include the delegate methods



func numberOfRows(in tableView: NSTableView) -> Int


and



func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?


within the class so it's self contained.



Here's the function to handle tab navigation



// handle tab and backtab in an editable view based tableView subclass
// will also scroll the edited cell into view when tabbing into view that are outside the viewable area
//ref https://developer.apple.com/documentation/appkit/nscontroltexteditingdelegate/1428898-control
func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
print(#function)

//let whichControl = control //this is the tableView textField where the event
// happened. In this case it will only be the
// NSTableCellView located within this tableView
let whichSelector = commandSelector //this is the event; return, tab etc

//these are the keypresses we are interested in, tab, backtab, return/enter.
let tabSelector = #selector( insertTab(_:) )
//let returnSelector = #selector( insertNewline(_:) ) //use this if you need
//custom return/enter handling
let backtabSelector = #selector( insertBacktab(_:) )

//if the user hits tab, need to determine where they are. If it's in the last
// column, need to see if there is another row and if so, move to next
// row, col 0 and go into edit. If it's a backtab in the first column, need
// to wrap back to the last row, last col and edit
if whichSelector == tabSelector
let row = self.row(for: textView)
let col = self.column(for: textView)
let lastCol = self.tableColumns.count - 1

if col == lastCol //we tabbed forward in the last column
let lastRow = self.transactionArray.count - 1
var rowToEdit: Int!

if row < lastRow //if we are above the last row, go to the next row
rowToEdit = row + 1

else //if we are at the last row, last col, tab around to the first row, first col
rowToEdit = 0


self.editColumn(0, row: rowToEdit, with: nil, select: true)
self.scrollRowToVisible(rowToEdit)
return true //tell the OS we handled the key binding
else
self.scrollColumnToVisible(col + 1)


else if whichSelector == backtabSelector
let row = self.row(for: textView)
let col = self.column(for: textView)

if col == 0 //we tabbed backward in the first column
let lastCol = self.tableColumns.count - 1
var rowToEdit: Int!

if row > 0 //and we are after row zero, back up a row and edit the last col
rowToEdit = row - 1

else // we are in row 0, col 0 so wrap forward to the last col, last row
rowToEdit = self.transactionArray.count - 1


self.editColumn(lastCol, row: rowToEdit, with: nil, select: true)
self.scrollRowToVisible(rowToEdit)
self.scrollColumnToVisible(lastCol)
return true
else
self.scrollColumnToVisible(col - 1)



return false //let the OS handle the key binding






share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53241431%2fnstableview-tab-between-columns-and-move-to-next-row%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    First is to subClass a view based NSTableView set set it up like this



    class ItemTableView: NSTableView, NSTableViewDataSource, NSTableViewDelegate, NSTextFieldDelegate {


    I have a tableView dataSource called transactionArray which holds the items to be displayed within the tableView. I also include the delegate methods



    func numberOfRows(in tableView: NSTableView) -> Int


    and



    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?


    within the class so it's self contained.



    Here's the function to handle tab navigation



    // handle tab and backtab in an editable view based tableView subclass
    // will also scroll the edited cell into view when tabbing into view that are outside the viewable area
    //ref https://developer.apple.com/documentation/appkit/nscontroltexteditingdelegate/1428898-control
    func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
    print(#function)

    //let whichControl = control //this is the tableView textField where the event
    // happened. In this case it will only be the
    // NSTableCellView located within this tableView
    let whichSelector = commandSelector //this is the event; return, tab etc

    //these are the keypresses we are interested in, tab, backtab, return/enter.
    let tabSelector = #selector( insertTab(_:) )
    //let returnSelector = #selector( insertNewline(_:) ) //use this if you need
    //custom return/enter handling
    let backtabSelector = #selector( insertBacktab(_:) )

    //if the user hits tab, need to determine where they are. If it's in the last
    // column, need to see if there is another row and if so, move to next
    // row, col 0 and go into edit. If it's a backtab in the first column, need
    // to wrap back to the last row, last col and edit
    if whichSelector == tabSelector
    let row = self.row(for: textView)
    let col = self.column(for: textView)
    let lastCol = self.tableColumns.count - 1

    if col == lastCol //we tabbed forward in the last column
    let lastRow = self.transactionArray.count - 1
    var rowToEdit: Int!

    if row < lastRow //if we are above the last row, go to the next row
    rowToEdit = row + 1

    else //if we are at the last row, last col, tab around to the first row, first col
    rowToEdit = 0


    self.editColumn(0, row: rowToEdit, with: nil, select: true)
    self.scrollRowToVisible(rowToEdit)
    return true //tell the OS we handled the key binding
    else
    self.scrollColumnToVisible(col + 1)


    else if whichSelector == backtabSelector
    let row = self.row(for: textView)
    let col = self.column(for: textView)

    if col == 0 //we tabbed backward in the first column
    let lastCol = self.tableColumns.count - 1
    var rowToEdit: Int!

    if row > 0 //and we are after row zero, back up a row and edit the last col
    rowToEdit = row - 1

    else // we are in row 0, col 0 so wrap forward to the last col, last row
    rowToEdit = self.transactionArray.count - 1


    self.editColumn(lastCol, row: rowToEdit, with: nil, select: true)
    self.scrollRowToVisible(rowToEdit)
    self.scrollColumnToVisible(lastCol)
    return true
    else
    self.scrollColumnToVisible(col - 1)



    return false //let the OS handle the key binding






    share|improve this answer
























      up vote
      0
      down vote













      First is to subClass a view based NSTableView set set it up like this



      class ItemTableView: NSTableView, NSTableViewDataSource, NSTableViewDelegate, NSTextFieldDelegate {


      I have a tableView dataSource called transactionArray which holds the items to be displayed within the tableView. I also include the delegate methods



      func numberOfRows(in tableView: NSTableView) -> Int


      and



      func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?


      within the class so it's self contained.



      Here's the function to handle tab navigation



      // handle tab and backtab in an editable view based tableView subclass
      // will also scroll the edited cell into view when tabbing into view that are outside the viewable area
      //ref https://developer.apple.com/documentation/appkit/nscontroltexteditingdelegate/1428898-control
      func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
      print(#function)

      //let whichControl = control //this is the tableView textField where the event
      // happened. In this case it will only be the
      // NSTableCellView located within this tableView
      let whichSelector = commandSelector //this is the event; return, tab etc

      //these are the keypresses we are interested in, tab, backtab, return/enter.
      let tabSelector = #selector( insertTab(_:) )
      //let returnSelector = #selector( insertNewline(_:) ) //use this if you need
      //custom return/enter handling
      let backtabSelector = #selector( insertBacktab(_:) )

      //if the user hits tab, need to determine where they are. If it's in the last
      // column, need to see if there is another row and if so, move to next
      // row, col 0 and go into edit. If it's a backtab in the first column, need
      // to wrap back to the last row, last col and edit
      if whichSelector == tabSelector
      let row = self.row(for: textView)
      let col = self.column(for: textView)
      let lastCol = self.tableColumns.count - 1

      if col == lastCol //we tabbed forward in the last column
      let lastRow = self.transactionArray.count - 1
      var rowToEdit: Int!

      if row < lastRow //if we are above the last row, go to the next row
      rowToEdit = row + 1

      else //if we are at the last row, last col, tab around to the first row, first col
      rowToEdit = 0


      self.editColumn(0, row: rowToEdit, with: nil, select: true)
      self.scrollRowToVisible(rowToEdit)
      return true //tell the OS we handled the key binding
      else
      self.scrollColumnToVisible(col + 1)


      else if whichSelector == backtabSelector
      let row = self.row(for: textView)
      let col = self.column(for: textView)

      if col == 0 //we tabbed backward in the first column
      let lastCol = self.tableColumns.count - 1
      var rowToEdit: Int!

      if row > 0 //and we are after row zero, back up a row and edit the last col
      rowToEdit = row - 1

      else // we are in row 0, col 0 so wrap forward to the last col, last row
      rowToEdit = self.transactionArray.count - 1


      self.editColumn(lastCol, row: rowToEdit, with: nil, select: true)
      self.scrollRowToVisible(rowToEdit)
      self.scrollColumnToVisible(lastCol)
      return true
      else
      self.scrollColumnToVisible(col - 1)



      return false //let the OS handle the key binding






      share|improve this answer






















        up vote
        0
        down vote










        up vote
        0
        down vote









        First is to subClass a view based NSTableView set set it up like this



        class ItemTableView: NSTableView, NSTableViewDataSource, NSTableViewDelegate, NSTextFieldDelegate {


        I have a tableView dataSource called transactionArray which holds the items to be displayed within the tableView. I also include the delegate methods



        func numberOfRows(in tableView: NSTableView) -> Int


        and



        func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?


        within the class so it's self contained.



        Here's the function to handle tab navigation



        // handle tab and backtab in an editable view based tableView subclass
        // will also scroll the edited cell into view when tabbing into view that are outside the viewable area
        //ref https://developer.apple.com/documentation/appkit/nscontroltexteditingdelegate/1428898-control
        func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
        print(#function)

        //let whichControl = control //this is the tableView textField where the event
        // happened. In this case it will only be the
        // NSTableCellView located within this tableView
        let whichSelector = commandSelector //this is the event; return, tab etc

        //these are the keypresses we are interested in, tab, backtab, return/enter.
        let tabSelector = #selector( insertTab(_:) )
        //let returnSelector = #selector( insertNewline(_:) ) //use this if you need
        //custom return/enter handling
        let backtabSelector = #selector( insertBacktab(_:) )

        //if the user hits tab, need to determine where they are. If it's in the last
        // column, need to see if there is another row and if so, move to next
        // row, col 0 and go into edit. If it's a backtab in the first column, need
        // to wrap back to the last row, last col and edit
        if whichSelector == tabSelector
        let row = self.row(for: textView)
        let col = self.column(for: textView)
        let lastCol = self.tableColumns.count - 1

        if col == lastCol //we tabbed forward in the last column
        let lastRow = self.transactionArray.count - 1
        var rowToEdit: Int!

        if row < lastRow //if we are above the last row, go to the next row
        rowToEdit = row + 1

        else //if we are at the last row, last col, tab around to the first row, first col
        rowToEdit = 0


        self.editColumn(0, row: rowToEdit, with: nil, select: true)
        self.scrollRowToVisible(rowToEdit)
        return true //tell the OS we handled the key binding
        else
        self.scrollColumnToVisible(col + 1)


        else if whichSelector == backtabSelector
        let row = self.row(for: textView)
        let col = self.column(for: textView)

        if col == 0 //we tabbed backward in the first column
        let lastCol = self.tableColumns.count - 1
        var rowToEdit: Int!

        if row > 0 //and we are after row zero, back up a row and edit the last col
        rowToEdit = row - 1

        else // we are in row 0, col 0 so wrap forward to the last col, last row
        rowToEdit = self.transactionArray.count - 1


        self.editColumn(lastCol, row: rowToEdit, with: nil, select: true)
        self.scrollRowToVisible(rowToEdit)
        self.scrollColumnToVisible(lastCol)
        return true
        else
        self.scrollColumnToVisible(col - 1)



        return false //let the OS handle the key binding






        share|improve this answer












        First is to subClass a view based NSTableView set set it up like this



        class ItemTableView: NSTableView, NSTableViewDataSource, NSTableViewDelegate, NSTextFieldDelegate {


        I have a tableView dataSource called transactionArray which holds the items to be displayed within the tableView. I also include the delegate methods



        func numberOfRows(in tableView: NSTableView) -> Int


        and



        func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?


        within the class so it's self contained.



        Here's the function to handle tab navigation



        // handle tab and backtab in an editable view based tableView subclass
        // will also scroll the edited cell into view when tabbing into view that are outside the viewable area
        //ref https://developer.apple.com/documentation/appkit/nscontroltexteditingdelegate/1428898-control
        func control(_ control: NSControl, textView: NSTextView, doCommandBy commandSelector: Selector) -> Bool
        print(#function)

        //let whichControl = control //this is the tableView textField where the event
        // happened. In this case it will only be the
        // NSTableCellView located within this tableView
        let whichSelector = commandSelector //this is the event; return, tab etc

        //these are the keypresses we are interested in, tab, backtab, return/enter.
        let tabSelector = #selector( insertTab(_:) )
        //let returnSelector = #selector( insertNewline(_:) ) //use this if you need
        //custom return/enter handling
        let backtabSelector = #selector( insertBacktab(_:) )

        //if the user hits tab, need to determine where they are. If it's in the last
        // column, need to see if there is another row and if so, move to next
        // row, col 0 and go into edit. If it's a backtab in the first column, need
        // to wrap back to the last row, last col and edit
        if whichSelector == tabSelector
        let row = self.row(for: textView)
        let col = self.column(for: textView)
        let lastCol = self.tableColumns.count - 1

        if col == lastCol //we tabbed forward in the last column
        let lastRow = self.transactionArray.count - 1
        var rowToEdit: Int!

        if row < lastRow //if we are above the last row, go to the next row
        rowToEdit = row + 1

        else //if we are at the last row, last col, tab around to the first row, first col
        rowToEdit = 0


        self.editColumn(0, row: rowToEdit, with: nil, select: true)
        self.scrollRowToVisible(rowToEdit)
        return true //tell the OS we handled the key binding
        else
        self.scrollColumnToVisible(col + 1)


        else if whichSelector == backtabSelector
        let row = self.row(for: textView)
        let col = self.column(for: textView)

        if col == 0 //we tabbed backward in the first column
        let lastCol = self.tableColumns.count - 1
        var rowToEdit: Int!

        if row > 0 //and we are after row zero, back up a row and edit the last col
        rowToEdit = row - 1

        else // we are in row 0, col 0 so wrap forward to the last col, last row
        rowToEdit = self.transactionArray.count - 1


        self.editColumn(lastCol, row: rowToEdit, with: nil, select: true)
        self.scrollRowToVisible(rowToEdit)
        self.scrollColumnToVisible(lastCol)
        return true
        else
        self.scrollColumnToVisible(col - 1)



        return false //let the OS handle the key binding







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 10 at 17:14









        Jay

        17.9k42848




        17.9k42848



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53241431%2fnstableview-tab-between-columns-and-move-to-next-row%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Top Tejano songwriter Luis Silva dead of heart attack at 64

            ReactJS Fetched API data displays live - need Data displayed static

            政党