How to select lines in a field under a scroller in IOS

Mark Talluto userev at canelasoftware.com
Tue Mar 19 18:25:44 EDT 2013


On Mar 19, 2013, at 2:27 PM, Michael Doub <mikedoub at gmail.com> wrote:

> Devin, you are correct.   I have a LiveCode field wrapped in an IOS scroller.   I have been playing with various list behavior and autohilite properties.   Since I am trying to select multiple lines at the same time I am seeing a conflict between the behavior of the field and the scroller.
> 
> Looking at the behaviour of the native input control,  apple seems to use a double tap to get into a select mode.  They seem to turn off the scroll while the selection is taking place then turn it back on again.  
> 
> It seems that I need to figure out how to disable scrolling during the selection process and then enable it again.
> 
> -= Mike


Here is some code that I use for my scrolling fields.  I can determine if you are clicking or scrolling.  It will also give you a tap to end of field (opposite of Apples tap at top of screen to quick scroll to top feature).


on ____LC_MESSAGES
end ____LC_MESSAGES
on preOpenCard
     put false into gWeAreScrollingFlag
    
     if the environment is "mobile" then
          set the traversalOn of fld "search" of card gSettingsA["search"] of stack gSettingsA["mainStack"] to false
          set the lockText of fld "search" of card gSettingsA["search"] of stack gSettingsA["mainStack"] to true
          set the doubleClickDelta to 100
          set the vScrollBar of fld "users" to false
     else
          set the doubleClickDelta to 4
          click at the loc of fld "find"
          set the vScrollBar of fld "users" to true
     end if
     
     if gSettingsA["hiliteColor"] <> empty then set the hiliteColor of fld "users" to gSettingsA["hiliteColor"] else set the hiliteColor of fld "users" to 255,114,0     
end preOpenCard



command csGetDatabaseFirstTime    
     --DOWNLOAD THE DATABASE ON FIRST RUN
     if gFirstRun then
          set the vis of fld "users" to false
          
          flashInternetIndicatorOff the short name of this card,the short name of this stack
          put false into gFirstRun
          
          if the environment is "mobile" then
               --KEYBOARD
               mobileSetKeyboardType "default"
               set the acceleratedRendering of this stack to true
               iphoneUseDeviceResolution false
               
               --CREATE SCROLLER FOR FIELD USERS IF NEEDED
               put mobileControls() into tControlList
               if "Users Scroller" is not in tControlList then
                    send "csSetupMobileScroller" && "users","gUsers" to me in 10 ticks
               end if
          end if
          
          set the vis of fld "users" to true
     end if
end csGetDatabaseFirstTime



on csTraversalOn
     set the traversalOn of fld "search" of card gSettingsA["search"] of stack gSettingsA["mainStack"] to true
end csTraversalOn



on ____CREATE_SCROLLER
end ____CREATE_SCROLLER
on csSetupMobileScroller pField,pGroup
     if the environment <> "mobile" then exit csSetupMobileScroller
     
     --SET UP THE USERS FIELD AND DATABASE GROUP
     lock screen
     set the vScroll of group pGroup to 0
     set the vScroll of fld pField to 0
     
     set the vis of fld pField to true
     set the listbehavior of field pField to true
     put the formattedHeight of field pField into tHeight
     put the width of field pField into tWidth
     
     --GIVE FIELD EXTRA SPACE SO WE CAN BOUNCE FIELD WITH LESS THAN A FULL SCREEN OF TEXT
     put the height of grp pGroup into tDatabaseHeight
     if tHeight < tDatabaseHeight + 10 then
          put true into tShortField
          set the height of field pField to tDatabaseHeight + 1
     else
          --DO NORMAL SPACING
          set the height of fld pField to tHeight
     end if
     
     put the height of fld pField into tHeight
     put the top of group pGroup into tDatabaseTop
     set the top of fld pField to 65
     
     put the rect of group pGroup into tRect
     set the unboundedvScroll of group pGroup to true
     
     --CREATE SCROLLER
     mobileControlCreate "scroller","Users Scroller"
     put the result into gUsersScrollerId
     mobileControlSet gUsersScrollerId,"rect",tRect
     
     mobileControlSet gUsersScrollerId,"contentRect",(0,0,tWidth,tHeight)
     
     mobileControlSet gUsersScrollerId,"visible","true"
     mobileControlSet gUsersScrollerId,"canBounce",true
     
     mobileControlSet gUsersScrollerId,"declerationRate",fast
     mobileControlSet gUsersScrollerId,"scrollingEnabled",true
     mobileControlSet gUsersScrollerId,"canScrollToTop",true
     mobileControlSet gUsersScrollerId,"delayTouches",false
     mobileControlSet gUsersScrollerId,"canCancelTouches",true
     
     mobileControlSet gUsersScrollerId,"hIndicator",false
     mobileControlSet gUsersScrollerId,"vIndicator",true
     
     mobileControlSet gUsersScrollerId,"indicatorInsets","0,0,5,0"
     mobileControlSet gUsersScrollerId,"vScroll",0
     mobileControlSet gUsersScrollerId,"hScroll",0
     
     
     --SCROLL TO THE END OF THE FIELD
     --IF THE FIELD IS FULL OF TEXT
     if not tShortField then
          put the height of fld pField into tUserHeight
          put the height of grp pGroup into tDatabaseHeight
          
          put tUserHeight - tDatabaseHeight into tDiff
          
          set the vScroll of group pGroup to tDiff
          mobileControlSet gUsersScrollerId,"vScroll",tDiff
     end if
     
     unlock screen
end csSetupMobileScroller




on ____SCROLLER_MESSAGES
end ____SCROLLER_MESSAGES
on scrollerDidScroll pOffsetX,pOffsetY
     put true into gWeAreScrollingFlag
     lock screen
     set the vScroll of group "gUsers" to pOffsetY
     mobileControlSet gUsersScrollerId,"vScroll",pOffsetY
     unlock screen
end scrollerDidScroll


on scrollerBeginDrag
     set the autohilite of fld "users" to false
     set the hilitedLine of fld "users" to empty
     put true into gWeAreScrollingFlag
end scrollerBeginDrag


on scrollerEndDrag
     put false into gWeAreScrollingFlag
end scrollerEndDrag


on scrollerEndDecelerate
     set the autohilite of fld "users" to true
     put false into gWeAreScrollingFlag
end scrollerEndDecelerate






More information about the Use-livecode mailing list